在柠檬水摊上,每一杯柠檬水的售价为 5
美圆。java
顾客排队购买你的产品,(按帐单 bills
支付的顺序)一次购买一杯。spa
每位顾客只买一杯柠檬水,而后向你付 5
美圆、10
美圆或 20
美圆。你必须给每一个顾客正确找零,也就是说净交易是每位顾客向你支付 5
美圆。code
注意,一开始你手头没有任何零钱。blog
若是你能给每位顾客正确找零,返回 true
,不然返回 false
。产品
示例 1:io
输入:[5,5,5,10,20] 输出:true 解释: 前 3 位顾客那里,咱们按顺序收取 3 张 5 美圆的钞票。 第 4 位顾客那里,咱们收取一张 10 美圆的钞票,并返还 5 美圆。 第 5 位顾客那里,咱们找还一张 10 美圆的钞票和一张 5 美圆的钞票。 因为全部客户都获得了正确的找零,因此咱们输出 true。
示例 2:class
输入:[5,5,10] 输出:true
示例 3:支付
输入:[10,10] 输出:false
示例 4:di
输入:[5,5,10,10,20] 输出:false 解释: 前 2 位顾客那里,咱们按顺序收取 2 张 5 美圆的钞票。 对于接下来的 2 位顾客,咱们收取一张 10 美圆的钞票,而后返还 5 美圆。 对于最后一位顾客,咱们没法退回 15 美圆,由于咱们如今只有两张 10 美圆的钞票。 因为不是每位顾客都获得了正确的找零,因此答案是 false。
提示:co
0 <= bills.length <= 10000
bills[i]
不是 5
就是 10
或是 20
让咱们尝试模拟每一个购买柠檬水的顾客带来的零钱变化。
最初,咱们从五美圆钞票开始,没有十美圆钞票。 若是客户带来5美圆的帐单,那么咱们就接受了。 若是客户带来10美圆的帐单,咱们必须退还5美圆的帐单。若是咱们没有5美圆的帐单,答案是假的,由于咱们没法作出正确的改变。 若是客户带来20美圆的帐单,咱们必须返还15美圆。 若是咱们有10美圆和5美圆,那么咱们老是更愿意作出改变,由于改变比3美圆5美圆更严重。 不然,若是咱们有三张5美圆的钞票,那么咱们就会给出。 不然,咱们将没法提供15美圆的变动,答案是假的。
class Solution { public boolean lemonadeChange(int[] bills) { int five = 0; int ten = 0; for(int i=0;i<bills.length;i++) { if(bills[i]==5) five++; else if (bills[i]==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; } }