什么是贪心算法
贪心算法是算法设计中的经典思想,核心逻辑在于每一步都做出当前情况下的最优选择,不回头、不纠结,最终期望得到全局最优解。它不像动态规划那样依赖中间状态存储,也不用回溯尝试所有可能,凭借'直来直往'的思路,成为解决特定问题的高效方案。
贪心算法的解题步骤
- 问题拆解:将复杂问题拆分成多个连续的局部决策步骤。
- 确定贪心策略:明确每一步的'最优标准'(比如'选最小''选最大''选最早结束')。
- 验证可行性:确认该策略能满足'局部最优推全局最优',避免无效贪心。这一步至关重要,因为有些题目看起来可以用贪心,实际上局部最优无法达到全局最优。
- 代码实现:通常先排序(按策略对应的规则),再遍历执行贪心选择。
贪心策略往往没有通用模板,需要根据每一题的具体场景设计不同的思路,经验积累非常关键。
具体例题及代码
LeetCode 860. 柠檬水找零
这道题要求模拟实现找零。我们的策略是每一次都尽量给大的零钱,因为这样我们可以确保只会出现零钱不够的情况,不会出现有钱但是无法使用的情况。

实现逻辑非常直观,就是找零能用大的就用大的。在贪心算法的学习初期,最重要的往往是识别出可以使用贪心的场景。
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int a = 0; // 5 元数量
int b = 0; // 10 元数量
int c = 0; // 20 元数量
int sz = bills.size();
for(int i = 0; i < sz; ++i) {
int num = bills[i];
if(num == 20) {
// 需要找 15 元,优先给 10+5
if(b && a) {
b--; a--;
}
(a >= ) {
a -= ;
}
;
}
(num == ) {
(a) {
a--; b++;
} ;
}
(num == ) a++;
}
;
}
};




