一、柠檬水找零
题目分析
顾客按顺序购买固定价格的柠檬水,需要判断能否正确找零。核心在于现金流的管理。
关键点如下:
- 初始无现金,若第一张不是 5 元直接失败。
- 只有 5、10、20 三种面额。
- 优先保留 5 元纸币,因为它是找零的基础。
解题思路
遇到 5 元:收下。 遇到 10 元:必须找 5 元,否则失败。 遇到 20 元:优先用 10+5 找零,没有 10 元再用三张 5 元。 这样能最大程度保留 5 元纸币,增加后续找零成功率。
代码实现
class Solution {
public boolean lemonadeChange(int[] bills) {
int five = 0, ten = 0;
for (int bill : bills) {
if (bill == 5) {
five++;
} else if (bill == 10) {
if (five == 0) return false;
five--;
ten++;
} else {
if (ten > 0 && five > 0) {
ten--;
five--;
} else if (five >= 3) {
five -= 3;
} else {
return false;
}
}
}
return true;
}
}


