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));
    }
}

posted @   小傻孩丶儿  阅读(58)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2020-05-24 有返回值的多线程
点击右上角即可分享
微信分享提示