本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

860.柠檬水找零

题目链接:https://leetcode-cn.com/problems/lemonade-change/

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。

顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

示例 1:
输入:[5,5,5,10,20]
输出:true
解释:
前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
由于所有客户都得到了正确的找零,所以我们输出 true。

示例 2:
输入:[5,5,10]
输出:true

示例 3:
输入:[10,10]
输出:false

示例 4:
输入:[5,5,10,10,20]
输出:false
解释:
前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。
对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。
对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。
由于不是每位顾客都得到了正确的找零,所以答案是 false。

提示:

  • 0 <= bills.length <= 10000
  • bills[i] 不是 5 就是 10 或是 20

思路

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

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

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

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

有如下三种情况:

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

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

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

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

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

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

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

C++代码如下:

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;}
};

总结

咋眼一看好像很复杂,分析清楚之后,会发现逻辑其实非常固定。

这道题目可以告诉大家,遇到感觉没有思路的题目,可以静下心来把能遇到的情况分析一下,只要分析到具体情况了,一下子就豁然开朗了。

如果一直陷入想从整体上寻找找零方案,就会把自己陷进去,各种情况一交叉,只会越想越复杂了。

就酱,如果感觉「代码随想录」干货满满,就帮忙宣传一波吧,感激不尽!

我是程序员Carl,可以找我组队刷题,也可以在B站上找到我,本文leetcode刷题攻略已收录,更多精彩算法文章尽在公众号:代码随想录,关注后就会发现和「代码随想录」相见恨晚!

如果感觉题解对你有帮助,不要吝啬给一个

「leetcode」860.柠檬水找零【贪心算法】详细!相关推荐

  1. 150. Leetcode 860. 柠檬水找零 (贪心算法-基础题目)

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

  2. LeetCode[860] 柠檬水找零 (贪心)

    PS: 本题目摘自 LeetCode 860 原题 柠檬水找零,一道贪心算法问题 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次 ...

  3. 柠檬水找零---贪心算法(c++)实现

    来源:力扣 链接:https://leetcode.cn/problems/lemonade-change/ 题目详情: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 ...

  4. 【LeetCode】860. 柠檬水找零 【简单模拟】

    题目链接:https://leetcode-cn.com/problems/lemonade-change/ 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 ...

  5. 【LeetCode】860. 柠檬水找零(C语言)

    贪心算法,创造更大利益-- bool lemonadeChange(int* bills, int billsSize){int c5=0,c10=0,c20=0,flag=0;for(int i=0 ...

  6. Leetcode 860. 柠檬水找零(贪心) 记录反思

    有的时候就应该找点简单题目提升一下自己的驱动力 有三种情况 情况一:账单是5,直接收下. 情况二:账单是10,消耗一个5,增加一个10 情况三:账单是20,优先消耗一个10和一个5,否则,消耗三个5 ...

  7. Leetcode 每日一题——860. 柠檬水找零

    860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 ...

  8. leetcode: 860. 柠檬水找零

    860. 柠檬水找零 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/lemonade-change/ 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. ...

  9. LeetCode每日一题--860. 柠檬水找零(贪心)

    题目:跳转至 860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元 ...

  10. leetcode.860. 柠檬水找零

    860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 ...

最新文章

  1. eclipse lombok插件安装_Eclipse-安装Freemarker插件
  2. SVN服务器搭建--Subversio与TortoiseSVN的配置安装
  3. 维特森 VTD72K14 多圈空心角度传感器 角位移传感器
  4. 应用服务攻击工具clusterd
  5. Caffe学习系列(13):对训练好的模型进行fine-tune
  6. #笔记:pta题笔记:注意:double不能直接比较大小!!!///////计算2个复数的和、差、积、商。
  7. canvas图形绘制
  8. wordpress怎么修改地址栏小图标
  9. 全面解析抖音直播各类玩法;新人也能快速直播。
  10. 用树莓派打拳皇游戏(运行 SWF 游戏文件)【Adobe Flash Player + Chromium】
  11. java文件编译后额外生成的$1.class是怎么一回事
  12. 2013年 macbookair bootcamp 安装win10双系统
  13. 水星路由app服务器无响应,手机登录不了水星路由器的管理界面解决方法
  14. 三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式
  15. Gaussdb,国产数据库的崛起
  16. 一篇文章解决计算机基础——进制转换难题
  17. !!!RFID原理及应用期末复习总结!!!少走弯路,直接满绩!
  18. 【有奖征集】 | 解锁程序YUAN的1024面
  19. 华为设备配置PIM-SM命令
  20. 国货美妆需要“诗和远方”

热门文章

  1. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
  2. [No00002E]关于大数据,你不知道的6个迷思
  3. Linux中的线程与进程以及调度
  4. 使用 Eclipse 插件部署 Java 应用
  5. 搜索引擎优化(SEO,Search Engine Optimization)如何让你的网站靠前排名
  6. Wavesequencer Hyperion for Mac(数字模块化合成器)
  7. PCDJ DEX 3 for mac(DJ混音打碟工具)
  8. 在Mac上如何设置自动解压下载的压缩文件?
  9. 苹果 macOS Big Sur 11.2.3 正式版发布
  10. 如何使用Vegas Pro制作遮罩转场效果?