323 字
2 分钟
代码随想录算法训练营第二十三天 | 贪心算法 Part01

贪心算法(Greedy)#

贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,
希望通过局部最优解最终导出全局最优解


🔸 考点梳理#

  • 贪心选择性质:局部最优解能导出全局最优解。
  • 最优子结构:问题的最优解可由子问题的最优解构成。
  • 正确性证明方法
    • 数学归纳法
    • 反证法
    • 反例排除

455. 分发饼干#

LeetCode 455. Assign Cookies

class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g.sort()
s.sort()
res = 0
index = len(s) - 1
for i in range(len(g) - 1, -1, -1):
if index >= 0 and s[index] >= g[i]:
res += 1
index -= 1
return res

376. 摆动序列#

LeetCode 376. Wiggle Subsequence

class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
if len(nums) <= 1:
return len(nums)
pre_diff = 0
cur_diff = 0
res = 1 # 至少有一个元素
for i in range(len(nums) - 1):
cur_diff = nums[i + 1] - nums[i]
if (pre_diff <= 0 and cur_diff > 0) or (pre_diff >= 0 and cur_diff < 0):
res += 1
pre_diff = cur_diff
return res

53. 最大子数组和#

LeetCode 53. Maximum Subarray

class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
dp = [0] * n # dp[i] 表示以 nums[i] 结尾的最大子数组和
dp[0] = nums[0]
res = nums[0]
for i in range(1, n):
dp[i] = max(nums[i], nums[i] + dp[i - 1])
res = max(res, dp[i])
return res
代码随想录算法训练营第二十三天 | 贪心算法 Part01
https://fuwari.vercel.app/posts/code_musings_day_twenty-three/
作者
Jarrett
发布于
2025-07-07
许可协议
CC BY-NC-SA 4.0