代码随想录贪心
时间: 2025-05-03 17:43:18 浏览: 29
### 关于贪心算法的题解
#### 什么是贪心算法?
贪心算法是一种在每一步选择中都采取当前状态下最优策略的方法,从而希望最终能够达到全局最优解。这种方法并不总是有效,但在某些特定情况下可以得到正确的结果。
#### 贪心算法的应用场景
贪心算法通常适用于那些可以通过局部最优来实现整体最优的问题。例如,在分配资源、路径规划等问题中,如果每次都能做出最佳的选择,则可能获得全局的最佳解决方案[^2]。
#### 示例题解:分发饼干 (LeetCode 455)
给定两个数组 `g` 和 `s`,分别表示孩子们的胃口值和饼干尺寸。目标是尽可能多地满足孩子的胃口需求。
解决方法如下:
1. 将孩子的需求按从小到大的顺序排列。
2. 同样地,将饼干也按照大小排序。
3. 使用双指针逐一匹配最小的孩子需求与最小的可用饼干。
```python
def findContentChildren(g, s):
g.sort()
s.sort()
child_index = cookie_index = 0
while child_index < len(g) and cookie_index < len(s):
if s[cookie_index] >= g[child_index]:
child_index += 1
cookie_index += 1
return child_index
```
这段代码实现了上述逻辑,并返回能被满足的孩子数量。
#### 另一个例子:摆动序列 (LeetCode 376)
此问题的目标是从输入数组中找到最长的子序列,使得该子序列中的相邻元素交替上升下降。以下是基于贪心思想的一个 C++ 实现:
```cpp
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() <= 1) return nums.size();
int curdif = 0;
int predif = 0;
int result = 1;
for (int i = 0; i < nums.size() - 1; ++i) {
curdif = nums[i + 1] - nums[i];
if ((curdif > 0 && predif <= 0) || (curdif < 0 && predif >= 0)) {
result++;
predif = curdif;
}
}
return result;
}
};
```
这里的关键在于利用差值的变化趋势判断是否构成有效的波动点[^3]。
#### 总结
虽然贪心算法不像动态规划那样有固定的模板,但它仍然遵循一定的设计原则——始终追求局部最优解并验证其能否导向全局最优解。对于初学者来说,掌握几个经典案例是非常重要的[^4]。
阅读全文
相关推荐

















