algorithm

def merge_sort(a,l,mid,r): #(l,mid)  (mid+1,r)
    b = [0] * (r-l+1)
    i,j,t = 0,1,0
    while True:
        if l + i > mid:
            b[t:] = a[mid+j:r+1]
            break
        elif mid + j > r:
            b[t:] = a[l+i:mid+1]
            break
        elif a[l + i] > a[mid + j]:
            b[t] = a[mid + j]
            j += 1
            t += 1
        elif a[l + i] <= a[mid + j]:
            b[t] = a[l + i]
            i += 1
            t += 1
    a[l:r+1] = b

def partition_sort(a,l,r):
    if l<r:
        mid = l + (r - l) // 2
        partition_sort(a,l,mid)
        partition_sort(a,mid+1,r)
        merge_sort(a,l,mid,r)

a = [6,  1 , 2, 7,  9 , 3 , 4  ,5 ,10 , 8]
partition_sort(a,0,len(a)-1)
print(a)
归并排序

堆排序

class Solution(object):
    def swap(self,x,i,j):
        tmp,x[i] = x[i],x[j]
        x[j] = tmp

    def partitionSort(self,x,l,r):
        i,j = l,r
        key = l
        while True:
            while x[j] >= x[key] and j > l:j -= 1
            while x[i] <= x[key] and i < r:i += 1
            if i >= j:break
            self.swap(x,i,j)
        self.swap(x,j,key)
        return j

    def quickSort(self,x,l,r):
        if l >= r:return
        p = self.partitionSort(x,l,r)
        print(x)
        self.quickSort(x,l,p-1)
        self.quickSort(x,p+1,r)

x = [6,  1 , 2, 7,  9 , 3 , 4  ,5 ,10 , 8]
Solution().quickSort(x,0,len(x)-1)
print(x)
快排
马拉车 回文子序列
class Solution(object):
    def minimumRepresentation(self, s):
        i,j,k,l = 0,1,0,len(s)
        while k<l and i<l and j<l:
            if s[(i+k)%l] == s[(j+k)%l]:
                k+=1
            else:
                if s[(i+k)%l]>s[(j+k)%l]:i=max(i+k+1,j+1)
                else:j=max(j+k+1,i+1)
                k=0
            print('i'+str(i)+'    j'+str(j)+'    k'+str(k))
        return min(i,j)
'''
babba
zzzzz
'''
while 1:
    x = 'cacacabaaa'
    s =Solution().minimumRepresentation(x)
    print(s)
    print(x[s:]+x[:s])
    break
字符串 最小表示
def maxSubSum(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    b, sub_sum = 0, float('-inf')
    for x in nums:
        if b > 0:
            b += x
        else:
            b = x
        if b > sub_sum: sub_sum = b
    return sub_sum
最大字段和
def get_pnext(p):
    pnext, L = [0], len(p)
    for i in range(1, L):
        k = pnext[i - 1]
        while k | 0 and p[k] != p[i]: k = pnext[k - 1]
        if p[k] == p[i]:
            pnext.append(k + 1)
        else:
            pnext.append(0)
    print(pnext)
    return pnext


def strStr(s, p):
    """
    :type haystack: str
    :type needle: str
    :rtype: int
    """
    if not p: return 0
    Ls, Lp = len(s), len(p)
    if Ls < Lp: return -1
    i, j, pnext = 0, 0, get_pnext(p)
    print(pnext)
    while i < Ls and j < Lp:
        if s[i] == p[j]:
            i += 1
            j += 1
        elif j != 0:
            j = pnext[j - 1]
        else:
            i += 1
    if j == Lp:
        return i - Lp
    return -1

p = ['a','b','a','b','a','a','b','c','a','b','c','d','e','a','b']
get_pnext(p)
KMP 字符串匹配

 

posted @ 2019-09-30 18:59  天上白云蓝湛湛  阅读(193)  评论(0编辑  收藏  举报