贪心算法
1. 什么是贪心算法
贪心算法是算法设计中的经典思想,核心逻辑用一句话就能概括——每一步都做出当前情况下的最优选择,不回头、不纠结,最终期望得到全局最优解。它不像动态规划那样依赖中间状态存储,也不用回溯尝试所有可能,凭借'直来直往'的思路,成为解决特定问题的高效方案。
2. 贪心算法的解题步骤
- 问题拆解:将复杂问题拆分成多个连续的局部决策步骤。
- 确定贪心策略:明确每一步的'最优标准'(比如'选最小''选最大''选最早结束')。
- 验证可行性:确认该策略能满足'局部最优推全局最优',避免无效贪心。
- 代码实现:通常先排序(按策略对应的规则),再遍历执行贪心选择。
注意:第三步最为关键。有些题目看似可以使用贪心,但实际不可行,因为局部最优不一定能达到全局最优解。贪心算法没有具体模版,需要根据每一题设计不同的思路,经验非常重要。
3. 具体例题及代码
3.1 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) {
if (b && a) {
b--;
a--;
c++;
} (a >= ) {
a -= ;
c++;
} {
;
}
}
(num == ) {
(a) {
a--;
b++;
} {
;
}
}
(num == ) {
a++;
}
}
;
}
};




