LeetCode:柠檬水找零【860】

LeetCode:柠檬水找零【860】

题目描述

在柠檬水摊上,每一杯柠檬水的售价为 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美元的账单,我们必须退还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;
    }
}

  

原文地址:https://www.cnblogs.com/MrSaver/p/9521041.html