- 前k个最小数
class Solution:
def GetLeastNumbers_Solution(self, input, k):
n = len(input)
if k<=0 or k>n:
return
for i in range(int(k/2), -1, -1):
self.adjustHeap(input, i, k-1)
for i in range(k, n):
if input[i] < input[0]:
input[0], input[i] = input[i], input[0]
self.adjustHeap(input, 0, k-1)
print(input[:k])
def adjust(self, nums, start, end):
temp = nums[start]
child = 2*start+1
while child <= end:
if child+1 <=end and nums[child] < nums[child+1]:
child += 1
if temp >= nums[child]:
break
nums[start] = nums[child]
start = child
child = start*2+1
nums[start] = temp
- 有效字符串括号长度
def longest_valid_parentheses(s):
maxlen = 0
dp = [0 for i in range(len(s))]
for i in range(1, len(s)):
if s[i] == ')':
if s[i-1] == '(':
dp[i] = dp[i-2] +2 if i>2 else 2
elif i-dp[i-1]>0 and s[i-dp[i-1]-1] == '(':
tmp = dp[i-dp[i-1]-2] if i-dp[i-1]>=2 else 0
dp[i] = dp[i-1]+2+tmp
maxlen = max(maxlen, dp[i])
return maxlen