LeetCode:柠檬水找零【860】

LeetCode:柠檬水找零【860】

题目描述

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

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

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

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

若是你能给每位顾客正确找零,返回 true ,不然返回 false 。产品

示例 1io

输入:[5,5,5,10,20]
输出:true
解释:
前 3 位顾客那里,咱们按顺序收取 3 张 5 美圆的钞票。
第 4 位顾客那里,咱们收取一张 10 美圆的钞票,并返还 5 美圆。
第 5 位顾客那里,咱们找还一张 10 美圆的钞票和一张 5 美圆的钞票。
因为全部客户都获得了正确的找零,因此咱们输出 true。

示例 2class

输入:[5,5,10]
输出:true

示例 3支付

输入:[10,10]
输出:false

示例 4di

输入:[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美圆的变动,答案是假的。

Java题解

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;
    }
}
相关文章
相关标签/搜索