323 字
2 分钟
代码随想录算法训练营第二十三天 | 贪心算法 Part01
贪心算法(Greedy)
贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,
希望通过局部最优解最终导出全局最优解。
🔸 考点梳理
- ✅ 贪心选择性质:局部最优解能导出全局最优解。
- ✅ 最优子结构:问题的最优解可由子问题的最优解构成。
- ✅ 正确性证明方法:
- 数学归纳法
- 反证法
- 反例排除
455. 分发饼干
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. 最大子数组和
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/