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

提示:

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

解决方案

方法:模拟情景

思路与算法

让我们尝试模拟给每个购买柠檬水的顾客进行找零的过程。最初,我们从没有 5 美元钞票也没有 10 美元钞票的情况开始。

如果顾客支付了 5 美元钞票,那么我们就得到 5 美元的钞票。

如果顾客支付了 10 美元钞票,我们必须找回一张 5 美元钞票。如果我们没有 5 美元的钞票,答案就是 false,因为我们无法正确找零。

如果顾客支付了 20 美元钞票,我们必须找回 15 美元。

如果我们有一张 10 美元和一张 5 美元,那么我们总会更愿意这样找零,这比用三张 5 美元进行找零更有利。

否则,如果我们有三张 5 美元的钞票,那么我们将这样找零。

否则,我们将无法给出总面值为 15 美元的零钱,答案是 false。

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

复杂度分析

时间复杂度:O(N)O(N),其中 NN 是 bills 的长度。

空间复杂度:O(1)O(1)。

【Demo】2.柠檬水找零相关推荐

  1. LeetCode 860[Python]. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

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

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

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

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

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

  4. 【LeetCode】两道贪心算法题目-455分发饼干,860柠檬水找零

    文章目录 第455题:分发饼干 第860题:柠檬水找零 第455题:分发饼干 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个 ...

  5. 贪心相关:柠檬水找零、买卖股票的最佳时机、分发饼干、跳跃游戏 ...

    文章目录 一.柠檬水找零 二.买卖股票的最佳时机 三.买卖股票的最佳时机II 四.分发饼干 五.模拟行走机器人(困难) 六.跳跃游戏 七.跳跃游戏II(困难) 一.柠檬水找零 注意:是按顺序收取,不是 ...

  6. 笔记1 第11课 贪心初步 ——柠檬水找零,分发饼干,跳跃游戏,完成所有任务所需最小能量——极客时间算法

    之前收藏了极客时间的算法训练营3期 共21课,计划每一课写博客来记录学习,主要形式为 方法类型1 题1 题解 题2 题解 方法类型2 题1 题解 -- 题目大体来自leetcode 和 acwing ...

  7. Suzy想吃烤蛋挞了Day35 | 贪心算法进行时:860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球

    860. 柠檬水找零 solution 不要漏掉的一种情况是:如果收到了20,可以找10+5,或者5+5+5 class Solution:def lemonadeChange(self, bills ...

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

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

  9. 面试算法 柠檬水找零

    1.题目:柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为5美元.顾客排队购买你的产品,一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付5美元.10美元或20美元.必须给每个顾客正确找零 注意,一开始 ...

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

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

最新文章

  1. Java 内存 关系_内存一致性 – 发生在Java之前的关系
  2. android studio 插件版本号和gradle版本号对应关系
  3. 浅谈群集与分布式基础知识
  4. GDCM:gdcm::JSON的测试程序
  5. 小打卡基于阿里云构建企业级数仓的实践及总结
  6. Titon Toolkit – 非常强大的用户界面组件
  7. vue实例中使用swiper
  8. Atitit  ocr识别原理 与概论 attilax总结
  9. 基于verilog的uart协议实现
  10. 所有程序员都应该知道的 6 个软件开发步骤
  11. 西伯利亚曾经叫鲜卑利亚
  12. 砸蛋程序php,基于JQuery+PHP编写砸金蛋中奖程序
  13. 荣耀XIO升级鸿蒙,距断供不到10天 华为大招来了:不止鸿蒙
  14. c/c++ 头文件(.h)、源文件(.cpp)书写及接口与实现分离实例
  15. od机考题目-机器人走迷宫
  16. win 7使用mimikatz实现MS14-068漏洞
  17. 魅族应用商店云端架构实践
  18. 制作官方 win10 U盘启动盘
  19. Python爬虫11-Scrapy爬虫框架
  20. 炫酷的网页特效展示分享

热门文章

  1. 物联网网关程序设计-4
  2. vue的:class={active:activ}可以动态切换class类名
  3. iphone win7无法识别_win7系统中iTools无法识别苹果设备的解决方法
  4. 华三指定启动配置文件_06-配置文件管理命令
  5. 找不到从属程序集***DLL的激活上下文生成失败
  6. php扩展文件sg11,linux系统虚拟主机开启支持SourceGuardian(sg11)加密组件的详细步骤...
  7. XML和XSL生成类PowerPoint组织结构图
  8. 飞利浦linux手机,Linux手机DIY.夏新E600和飞利浦968安装包专题
  9. Tiktok 弹幕游戏直播互动数据获取方案
  10. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略