题目

在柠檬水摊上,每一杯柠檬水的售价为 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

思路

模拟 + 贪心
由于顾客只可能给你三个面值的钞票,而且我们一开始没有任何钞票,因此我们拥有的钞票面值只可能是 5 美元,10 美元和 20美元三种。基于此,我们可以进行如下的分类讨论。

5 美元,由于柠檬水的价格也为 5 美元,因此我们直接收下即可。

10 美元,我们需要找回 5 美元,如果没有 5 美元面值的钞票,则无法正确找零。

20 美元,我们需要找回 15 美元,此时有两种组合方式,一种是一张 10 美元和 5美元的钞票,一种是 3张 5 美元的钞票,如果两种组合方式都没有,则无法正确找零。当可以正确找零时,两种找零的方式中我们更倾向于第一种,即如果存在 5 美元和 10美元,我们就按第一种方式找零,否则按第二种方式找零,因为需要使用 5 美元的找零场景会比需要使用 10 美元的找零场景多,我们需要尽可能保留 5 美元的钞票。

基于此,我们维护两个变量 five 和ten 表示当前手中拥有的 5 美元和 10 美元钞票的张数,从前往后遍历数组分类讨论即可。

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 (five > 0 && ten > 0) {five--;ten--;} else if (five >= 3) {five -= 3;} else {return false;}}}return true;}
}

LeetCode 860. 柠檬水找零 做题小结相关推荐

  1. leetcode: 860. 柠檬水找零

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

  2. leetcode.860. 柠檬水找零

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

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

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

  4. LeetCode#860: 柠檬水找零

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

  5. LeetCode 860. 柠檬水找零(贪心)

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

  6. LeetCode 860.柠檬水找零(C++)

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

  7. leetcode 860. 柠檬水找零(贪心算法)

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

  8. Leetcode——860.柠檬水找零——题解—+代码实现

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

  9. LeetCode 860. 柠檬水找零 (简单)greedy

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

最新文章

  1. yii 添加数据时 有默认值 就赋值默认值
  2. 【luogu P5022 旅行】 题解
  3. Go语言计时器的使用详解
  4. h3c linux静态链路聚合,H3C静态链路聚合与典型配置.doc
  5. 让Vim更好用 for Mac OS X | Hessian's Blog
  6. 【优化算法】改进定步长与变步长LMS算法【含Matlab源码 629期】
  7. SDM连接小凡的模拟路由器并配置图文并貌详细解说
  8. OpenCV-学习历程4- 读取图像/读取像素/修改像素值方法(包含灰度+rgb图像像素处理方式)
  9. 深度学习七:GAN和DCGAN入门
  10. 快手-艳云脚本云控系统
  11. 【論文筆記】MIDAS:Microcluster-Based Detector of Anomalies in Edge Streams
  12. Mat对象使用at<uchar>报错
  13. 北京大学人工智能研究院落户武汉,致力于打造一流人工智能研发机构
  14. 阿里如何定义团队的研发效能?
  15. 编程语言c24d,可编程控制器RJ71C24-R4FB参考三菱RJ71C24-R4手册 - 广州凌控
  16. 卷积神经网络常用模型,卷积神经网络数学建模
  17. 全球与中国PH传感器盒市场深度研究分析报告
  18. 方舟服务器商店系统,《方舟:生存进化》转服系统将上线,一键搬家了解一下!...
  19. 人脸生成的最强算法——《StyleGAN》论文解析
  20. 深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码)

热门文章

  1. 【RPA入门教程】数据抓取功能使用教学(一)
  2. ZXing二维码介绍
  3. Broadcast彻底解析
  4. Python Numpy基础教程
  5. webpack中require的用法
  6. python制作桌面时钟 的软件 python.py文件到exe 可执行文件
  7. C#中WriteLine与Write ReadLine与ReadKeyR与Read的区别:
  8. Visual Studio 调试 .net mvc 项目 Console.WriteLine 无法输出到控制台 解决方案
  9. Ubuntu21.04更新镜像源报错error while refreshing cache
  10. 【软考】--计算机硬件基础