#快排 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)
#堆排序 def heapSort(arr,n,i): miniest,l,r = i,2*i+1,2*i+2 if l<n and arr[l] < arr[miniest]: miniest = l if r<n and arr[r] < arr[miniest]: miniest = r if miniest != i: arr[miniest],arr[i] = arr[i],arr[miniest] heapSort(arr,n,miniest) def minHeapSort(arr): n = len(arr) for i in range(n-1,-1,-1): heapSort(arr,n,i) for i in range(n-1,0,-1): arr[i],arr[0] = arr[0],arr[i] heapSort(arr,i,0) arr = [10,46,22,81,91,60,31,30,77,96,13,20,65,35,65] minHeapSort(arr) n = len(arr) print("排序后") for i in range(n): print("%d" % arr[i])
# KMP
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)
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
# 马拉车 寻找回文子串
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
s1 = ‘#‘.join(s)
s1 = ‘#‘ + s1 + ‘#‘
l1 = len(s1)
r = [0] * l1
for i in range(0, l1):
if r[i] != 0:
continue
r[i] = 1
for j in range(i - 1, -1, -1):
delta = i - j
tmp = i + delta
if tmp == l1 or s1[j] != s1[tmp]:
break
r[i] += 1
for delta in range(1, r[i]):
j = i - delta
r2 = r[i] - delta
if r[j] < r2:
r[i + delta] = r[j]
if r[j] > r2:
r[i + delta] = r2
max_r = max(r)
index = r.index(max_r)
return s1[index - max_r + 1:index + max_r - 1].replace(‘#‘, ‘‘)
‘‘‘
#动态规划版本
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
l = len(s)
if l == 0:
return ‘‘
m = [[False for _ in range(l)] for _ in range(l)]
index = 0
max_l = 1
for k in range(0,l):
for i in range(l-k):
j = i + k
if (j-i<2 or m[i+1][j-1]) and s[i] == s[j]:
m[i][j] = True
if m[i][j] and j+1-i>max_l:
max_l = j+1-i
index = i
return s[index:index+max_l]
‘‘‘
# 最大字段和
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
# 最小表示 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)
原文:https://www.cnblogs.com/yvlian/p/11613914.html