zoukankan      html  css  js  c++  java
  • 860. 柠檬水找零『简单』

    题目来源于力扣(LeetCode

    一、题目

    860. 柠檬水找零

    题目相关标签:贪心算法

    提示:

    • 0 <= bills.length <= 10000
    • bills[i] 不是 5 就是 10 或是 20

    二、解题思路

    1. 该题可以用现实生活中的方式来完成模拟,即模拟情景,再用代码的方式表现出现即可

    2. 定义两个变量用于记录 5 元及 10 元钞票出现的次数

    3. 当出现 10 元时,判断是否最少有一个 5 元存在,即记录 5 元钞票的变量大于 0

    4. 当出现 20 元时,有 1 张 10 元加 1 张 5 元找零,3 张 5 元找零的两种方式

    5. 那么采用贪心法的思想,优先使用 1 张 10 元加 1 张 5 元找零方式,当条件不满足时,再考虑 3 张 5 元找零的方式,均不满足时,说明无法进行找零,return false

      因为 5 元钞票可以组成 10 元钞票,而 10 元钞票无法组成 5 元钞票

    三、代码实现

    public static boolean lemonadeChange(int[] bills) {
        int five = 0;  // 记录 5 元出现的次数
        int ten = 0;  // 记录 10 元出现的次数
        // 排除特殊情况:数组长度为零时
        if (bills.length == 0) {
            return true;
        }
        // 排除特殊情况:数组首位不为 5 时
        if (bills[0] == 10 || bills[0] == 20) {
            return false;
        }
    
        for (int i = 0; i < bills.length; i++) {
            if (bills[i] == 5) {
                five ++;
            } else if (bills[i] == 10) {
                // 对 10 元找零
                if (five == 0) {
                    return false;
                }
                // 5 元加 1,10 元减 1
                five --;
                ten ++;
            } else {
                // 出现 20 元时,找零
                // 贪心法的体现,优先使用一张 10 元与 一张 5 元的进行找零
                if (five >= 1 && ten >= 1) {
                    five --;
                    ten --;
                }
                // 10 元钞票不够时,再使用 3 张 5 元钞票找零
                else if (five >= 3) {
                    five -= 3;
                } else {
                    // 3 张 5 元与 1 张 10元,1 张 5 元均不拥有时,false
                    return false;
                }
            }
        }
        // 遍历完数组时,返回 true
        return true;
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
        int[] bills = {5, 5, 5, 10, 20};  // output:true
    //    int[] bills = {5, 5, 10};  // output:true
    //    int[] bills = {10, 10};  // output:false
    //    int[] bills = {5, 5, 10, 10, 20};  // output:false
        boolean result = lemonadeChange(bills);
        
        System.out.println(result);
    }
    
  • 相关阅读:
    Qt 4.7
    CMake记录(一)
    CMake记录(二)
    a critical review of preetham skylight model 笔记
    在webform中清空多个控件的值的简单方法
    Java学习网站 [摘自互联网]
    关于Google API的学习
    DataGrid连接的
    http://www.dnc.com.cn
    在DataGrid中显示数据库中的图片
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12898798.html
Copyright © 2011-2022 走看看