Lc860_柠檬水找零


package com.example.leetcode;

/**
 * @description:
 *
 * 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
 *
 * @author: licm
 * @create: 2021-05-24 09:44
 **/
public class Lc860_柠檬水找零 {

    /**
     * 策略
     * 五元 直接收
     * 十元 找五元
     * 二十元 有限消耗 十元 五元 或者三个五元
     * 优先使用大面额的,
     *
     * @param bills
     * @return
     */
    public static boolean lemonadeChange(int[] bills) {
        int five =0;
        int ten = 0;
        int twenty = 0;
        for (int i = 0; i < bills.length; i++) {
            if(bills[i] == 5){
                five++;
            }
            if(bills[i] == 10 ){
                if(five<=0){
                    return false;
                }
                ten++;
                five--;
            }
            if(bills[i] == 20){
                if(five>0 && ten > 0){
                    five--;
                    ten--;
                    twenty++;
                }else if(five>=3){
                    five-=3;
                    twenty++;
                }else{
                    return false;
                }
            }
        }
        return  true;
    }

    public static void main(String[] args) {
//        int[] bills = {5,5,5,10,20};
//        int[] bills = {5,5,10,10,20};
        int[] bills = {5,5,10,20,5,5,5,5,5,5,5,5,5,10,5,5,20,5,20,5};
        System.out.println(lemonadeChange(bills));
    }
}

不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
原文地址:https://www.cnblogs.com/xiaoshahai/p/14803187.html