贪心算法|860.柠檬水找零

力扣题目链接

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int five = 0, ten = 0, twenty = 0;
        for (int bill : bills) {
            // 情况一
            if (bill == 5) five++;
            // 情况二
            if (bill == 10) {
                if (five <= 0) return false;
                ten++;
                five--;
            }
            // 情况三
            if (bill == 20) {
                // 优先消耗10美元,因为5美元的找零用处更大,能多留着就多留着
                if (five > 0 && ten > 0) {
                    five--;
                    ten--;
                    twenty++; // 其实这行代码可以删了,因为记录20已经没有意义了,不会用20来找零
                } else if (five >= 3) {
                    five -= 3;
                    twenty++; // 同理,这行代码也可以删了
                } else return false;
            }
        }
        return true;
    }
};

这题就分析好了很简单嘛~

思路

这是前几天的leetcode每日一题,感觉不错,给大家讲一下。

这道题目刚一看,可能会有点懵,这要怎么找零才能保证完成全部账单的找零呢?

但仔细一琢磨就会发现,可供我们做判断的空间非常少!

只需要维护三种金额的数量,5,10和20。

有如下三种情况:

  • 情况一:账单是5,直接收下。
  • 情况二:账单是10,消耗一个5,增加一个10
  • 情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5

此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。

而情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。

账单是20的情况,为什么要优先消耗一个10和一个5呢?

因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!

所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。

局部最优可以推出全局最优,并找不出反例,那么就试试贪心算法!

自己的思路:

就是分情况咯!

相关推荐

  1. 贪心算法】之买柠檬水

    2024-04-10 16:44:01       48 阅读
  2. [力扣题解]860. 柠檬水

    2024-04-10 16:44:01       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 16:44:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 16:44:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 16:44:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 16:44:01       20 阅读

热门阅读

  1. Docker in Docker原理与实战

    2024-04-10 16:44:01       15 阅读
  2. vue-创建实例

    2024-04-10 16:44:01       14 阅读
  3. node.js的常用命令

    2024-04-10 16:44:01       16 阅读
  4. WebGL入门

    2024-04-10 16:44:01       14 阅读
  5. git commit --amend用法

    2024-04-10 16:44:01       18 阅读
  6. 【云开发笔记NO.27】分布式数据库

    2024-04-10 16:44:01       15 阅读
  7. 新浪微博导航

    2024-04-10 16:44:01       15 阅读
  8. 李沐21_卷积层多输入多输出通道——自学笔记

    2024-04-10 16:44:01       13 阅读
  9. uniapp的一些记录

    2024-04-10 16:44:01       16 阅读
  10. 快速解决关于Quartus打不开图像文件问题

    2024-04-10 16:44:01       21 阅读
  11. 用队列实现栈(C)

    2024-04-10 16:44:01       13 阅读