1、分发饼干
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
s.sort() # 把饼干和胃口都排序
g.sort()
idx = 0
cnt = 0
for i in s:
# 从小到大的饼干满足从小到大的胃口
if(idx<len(g) and i >= g[idx]):
cnt += 1
idx += 1
return cnt
2、摆动序列
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
if len(nums) <= 1: return len(nums)
curdiff = 0 # 计算当前差值
prediff = 0 # 上一时刻差值
result = 1
for i in range(len(nums)-1):
curdiff = nums[i+1] - nums[i]
# 两时刻插值符号不同,计入结果
if (curdiff > 0 and prediff <= 0) or (curdiff < 0 and prediff >= 0):
result += 1
prediff = curdiff
return result
3、最大子序和
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
result = float('-inf') # 把result初始化为最小值
count = 0 # count记录子序列和
for i in nums:
count += i
# 如果count大于result,说明当前子序列和已经超越了最大值,更新
if count > result:
result = count
# 如果count小于0,说明累加count会拖累后续子序列,因此重开一个子序列
if count < 0:
count = 0
return result
这道题一开始有点不能理解if count<0: count=0的操作