力扣860-柠檬水找零(java详细题解)

题目链接:860. 柠檬水找零 - 力扣(LeetCode)

前情提要:

因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。

贪心方法:局部最优推出全局最优。

如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。

题目思路:

该题其实蛮好入手,因为他只有三种逻辑的处理方式。

1.当顾客给你5块,你不用找零,手下这5块。

2.当顾客给你10块,你只能用5来找零,没有的话返回false;

3.当顾客给你20块,此时你有俩种方式找零

  • 给一个10块和一个5块
  • 给三个5块

那么我们该如何选择呢?

其实这里我们就用到了贪心。

我们应该优先选择第一种方式,因为5块更有用,如果你在20块将所有的5块用完了,后面还有一位顾客给你10块呢,那就找不了零了。

但是如果选第一种方式,这样的情况就会避免。

所以我们贪在选第一种方式。

局部最优:遇到账单20,优先消耗美元10,完成本次找零。

全局最优:完成全部账单的找

最终代码:

java 复制代码
class Solution {
    public boolean lemonadeChange(int[] bills) {
        //定义每一种零钱的数量
        int five = 0,ten = 0;
        for(int i = 0;i < bills.length;i ++){
            //当遇到5美元时
            if(bills[i] == 5){
                five ++;
                //遇到10美元时
            }else if(bills[i] == 10){
                if(five < 0){
                    return false;
                }
                ten ++;
                five --;
                //遇到20美元时
            }else{
                //优先采用第一种策略
                if(ten > 0 && five > 0){
                    ten --;
                    five--;
                }else if(five - 3 >= 0){
                    five -= 3;
                    //俩种策略都不行,返回false
                }else{
                    return false;
                }
            }
        }
        return true;
    }
}

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!

相关推荐
w_zero_one1 小时前
算法--模拟
java·数据结构·算法
Javatutouhouduan1 小时前
阿里1658页Java面试题总结(含答案)
java·高并发·java面试·java面试题·后端开发·java程序员·java八股文
秋天的怀念_David2 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
专业程序开发源2 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
秋天的怀念_David2 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
thefool1122662 小时前
网络编程^
java
薛定e的猫咪2 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪3 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
Thinker QAQ3 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
齐 飞3 小时前
idea中git误操作撤回git reset --hard ‘HEAD@{1}‘
java·git·intellij-idea