860. 柠檬水找零

✅做题思路or感想

这一题经典贪心

难点有二

  • 如何模拟钱币交换的过程
  • 贪心的策略

如何模拟钱币交换的过程

这里其实用三个数组分别来记录三种纸币的数量就可以了(是不是很简单)

贪心的策略

这里先分情况

  1. 客人付了5块钱。这个时候不需要找零
  2. 客人付了10块钱,需要找5块钱回去
  3. 客人付了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;
    }
};
posted @   北原春希  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示