860. 柠檬水找零
✅做题思路or感想
这一题经典贪心
难点有二
- 如何模拟钱币交换的过程
- 贪心的策略
如何模拟钱币交换的过程
这里其实用三个数组分别来记录三种纸币的数量就可以了(是不是很简单)
贪心的策略
这里先分情况
- 客人付了5块钱。这个时候不需要找零
- 客人付了10块钱,需要找5块钱回去
- 客人付了20块钱,可以付3张5块钱回去,也可以付1张10块钱和1张五块钱
这里贪心的策略主要针对第三种情况。由上面分情况可知道5块钱的纸币是灵活性最高的,所以应该优先保留。所以在客人付20块钱时,先考虑给他1张10和1张5,如果不行,再考虑给他3张5块的,这就是贪心策略
代码如下
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
//准备三个数组来记录三种纸币数量
int money5 = 0, money10 = 0, money20 = 0;
for (int i = 0; i < bills.size(); i++) {
//情况1
if (bills[i] == 5) {
money5++;
}
//情况2
if (bills[i] == 10) {
money10++;
money5--;
if (money5 < 0)return false;
}
//情况3
if (bills[i] == 20) {
money20++;
//贪心
if (money10 > 0 && money5 > 0) {
money5--;
money10--;
} else if (money5 > 2) {
money5 -= 3;
} else return false;
}
}
//如果过程完整走完而不出错,则所有客户都可以得到正确的找零
return true;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端