问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4036 访问。

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

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

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

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

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

输入:[5,5,5,10,20]

输出:true

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

输入:[5,5,10]

输出:true

输入:[10,10]

输出:false

输入:[5,5,10,10,20]

输出:false

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

提示:

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

At a lemonade stand, each lemonade costs $5.

Customers are standing in a queue to buy from you, and order one at a time (in the order specified by bills).

Each customer will only buy one lemonade and pay with either a $5, $10, or $20 bill.  You must provide the correct change to each customer, so that the net transaction is that the customer pays $5.

Note that you don't have any change in hand at first.

Return true if and only if you can provide every customer with correct change.

Input: [5,5,5,10,20]

Output: true

Explanation: From the first 3 customers, we collect three $5 bills in order.From the fourth customer, we collect a $10 bill and give back a $5.From the fifth customer, we give a $10 bill and a $5 bill.Since all customers got correct change, we output true.

Input: [5,5,10]

Output: true

Input: [10,10]

Output: false

Input: [5,5,10,10,20]

Output: false

Explanation: From the first two customers in order, we collect two $5 bills.For the next two customers in order, we collect a $10 bill and give back a $5 bill.For the last customer, we can't give change of $15 back because we only have two $10 bills.Since not every customer received correct change, the answer is false.

Note:

  • 0 <= bills.length <= 10000
  • bills[i] will be either 5, 10, or 20.

示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4036 访问。

public class Program {public static void Main(string[] args) {var bills = new int[] { 5, 5, 5, 10, 20 };var res = LemonadeChange(bills);Console.WriteLine(res);bills = new int[] { 5, 5, 10, 10, 20 };res = LemonadeChange2(bills);Console.WriteLine(res);bills = new int[] { 5, 10 };res = LemonadeChange3(bills);Console.WriteLine(res);Console.ReadKey();}public static bool LemonadeChange(int[] bills) {//统计5美元和10美元的数量var five = 0;var ten = 0;for(var i = 0; i < bills.Length; i++) {if(bills[i] == 5) {//5美元,则5美元+1five++;} else if(bills[i] == 10) {//10美元,则10美元+1,找零5美元,5美元-1ten++;five--;} else if(bills[i] == 20) {//20美元时,尽量先找零10美元和5美元//然后考虑找零3个5美元if(ten > 0) {ten--;five--;} else {five -= 3;}}//5美元或10美元小于0时,说明至少有1次找零是失败的//直接返回 falseif(five < 0 || ten < 0) return false;}//最后返回 truereturn true;}public static bool LemonadeChange2(int[] bills) {//基本思路同 LemonadeChange,提供了一个不同的实现var list = new List<int>();for(var i = 0; i < bills.Length; i++) {if(bills[i] == 5) {list.Add(5);} else if(bills[i] == 10) {list.Add(10);if(!list.Remove(5)) return false;} else if(bills[i] == 20) {if(list.Remove(10)) {if(!list.Remove(5)) return false;} else {for(var j = 0; j < 3; j++) {if(!list.Remove(5)) return false;}}}}return true;}public static bool LemonadeChange3(int[] bills) {//不建议的解法,仅提供思路//基本思路同 LemonadeChange,提供了一个不同的实现try {var five = new Stack<int>();var ten = new Stack<int>();for(var i = 0; i < bills.Length; i++) {if(bills[i] == 5) {five.Push(5);//这个值是什么无所谓} else if(bills[i] == 10) {ten.Push(10);//这个值是什么无所谓five.Pop();} else if(bills[i] == 20) {if(ten.Any()) {ten.Pop();five.Pop();} else {for(var j = 0; j < 3; j++) {five.Pop();}}}}return true;} catch(Exception ex) {return false;}}}

以上给出3种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4036 访问。

True
False
True

分析:

显而易见,以上3种算法的时间复杂度均为:  。

C#LeetCode刷题之#860-柠檬水找零(Lemonade Change)相关推荐

  1. C语言/860.(柠檬水找零)Lemonade Change

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

  2. leedcode每日一题:860. 柠檬水找零

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

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

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

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

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

  5. leetcode: 860. 柠檬水找零

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

  6. leetcode.860. 柠檬水找零

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

  7. 代码随想录35——贪心:860柠檬水找零、406根据身高重建队列、452用最少数量的箭引爆气球

    文章目录 1.860柠檬水找零 1.1.题目 1.2.解答 2.406根据身高重建队列 2.1.题目 2.2.解答 3.452用最少数量的箭引爆气球 3.1.题目 3.2.解答 1.860柠檬水找零 ...

  8. 代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

    代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球 860.柠檬水找零 406. 根据身高重建队列 452. 用最少数量的箭引爆气球 860. ...

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

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

最新文章

  1. 【号外号外:微软收购 .NET 的开源实现 Xamarin 项目的公司】
  2. SSL 1055——能量项链_DP
  3. 105_键盘事件对象
  4. afx_msg函数意思
  5. WP8开发札记(一)WP8应用生命周期管理
  6. python redis分布式锁_Python 使用 Redis 实现分布式锁
  7. orchard学习,
  8. PHP 7.3 比 PHP 7.0 快 22%,即将进入特性冻结阶段
  9. HPU--1392 分隔A+B
  10. 对于长时间装载的ASP.NET页面如何在客户端浏览器中显示进度?
  11. python网页教程_python网页教程
  12. 新浪微博接口在safri下的bug
  13. 简单的超市会员管理系统
  14. 如何合并同一个磁盘里面的两个区(卷)
  15. 万能数据库查询分析器使用技巧之(十一)
  16. Ps如何使用透视裁剪工具
  17. 未来10年 人工智能将如何影响淘宝发展?
  18. Windows电脑 添加 安卓或者苹果平板作为拓展屏(spacedesk )
  19. 机器学习数学基础九:回归分析
  20. 《深入理解计算机系统》漫游指南

热门文章

  1. Annaconda下Python2.7路径
  2. Pandas: 使用read_excel、describe、loc方法求极差、变异系数与四分位数间距
  3. 华为机试——字符串分隔
  4. LeetCode 287. Find the Duplicate Number
  5. 【今日CV 视觉论文速览】 19 Nov 2018
  6. JVM——jinfo命令使用及GC日志分析
  7. JVM—GC垃圾回收器总结
  8. 草稿 复选框绑定数据 1204
  9. 安卓页面去掉顶部标题
  10. hibernate、java、数据库对应类型