zoukankan      html  css  js  c++  java
  • 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 字符串匹配
  • 相关阅读:
    指针系统学习5-对使用字符指针变量和字符数组的讨论
    指针系统学习4-字符串与指针
    指针系统学习3-多维数组与指针
    指针系统学习2
    指针系统学习1
    你视为意见领袖的大 V,可能只是个僵尸号
    phpinfo()
    用shell脚本守护后台进程
    mysql命令(command)
    MySQL数据库视图(view),视图定义、创建视图、修改视图
  • 原文地址:https://www.cnblogs.com/yvlian/p/11613914.html
Copyright © 2011-2022 走看看