贪心基础:
有局部到全局,有规律的发现解法
455.分发饼干
为了让每个孩子都能有饼干且满足孩子们的胃口值,都尽量往小的给,这样就可以确保在足够的饼干的前提下,每个孩子都有饼干
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
res, i = 0, 0
n = len(s)
for x in g:
while i < n and x > s[i]:
i += 1
if i < n:
res += 1
i += 1
else:
break
return res
376. 摆动序列
假设第一个差值为正,贪心的寻找下一个相反差值(负),接着继续寻找下一个相反差值直至遍历结束。这样可以可以直接保证是最大的摇摆序列。
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
if len(nums) == 1:
return 1
res = 1
curDiff = 0
preDiff = 0
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):
res += 1
preDiff = curDiff
return res
53. 最大子序和
每个值都等于其(本身or前面值+本身)的最大值吗,原地改变数组,非常方便
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
dp = [0] * n
dp[0] = nums[0]
for i in range(1, n):
dp[i] = max(nums[i], dp[i - 1] + nums[i])
return max(dp)