455. 分发饼干
def findContentChildren(self, g: List[int], s: List[int]) -> int:
num = 0
g.sort()
s.sort()
c, b = 0, 0
for b in s:
if b >= g[c]:
num += 1
c += 1
else:
continue
if c == len(g):
break
return num
376. 摆动序列
贪心 算前后差值的乘积是否小于0
注意前后两数相等的情况
def wiggleMaxLength(self, nums: List[int]) -> int:
minus = []
flag = 0
count = 1
for i in range(1, len(nums)):
minus = nums[i]-nums[i-1]
if flag * minus <= 0 and minus != 0:
count += 1
flag = minus
return count
dp解法
(待补)
53. 最大子数组和
局部最优的情况下,并记录最大的“连续和”,可以推出全局最优
其实贪心的思想,就是从局部最优扩散到全局最优
如果遇到负数,就比较累计到目前的结果是否比负数大,大就说明可以包括负数,这样的思路在遇到全负数组时会错误
设res起始值为负数,注意先取ans
def maxSubArray(self, nums: List[int]) -> int:
ans = 0
res = -inf
for i in range(len(nums)):
ans += nums[i]
# 注意判断顺序
if ans > res:
res = ans
if ans <= 0:
ans = 0
return res
分治法
(待补)