88、贪心-柠檬水找零-LeetCode-860.柠檬水找零

题目描述

在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

注意,一开始你手头没有任何零钱。

给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

来源:力扣(LeetCode)

思路

1)20就先找10+5;另一种就是找3 * 5;

10只能找5;

只用维护 5 和 10的个数!

代码

1)不像贪心—处理的情况很固定

class Solution {
    public boolean lemonadeChange(int[] bills) {
        //20是不能拿来用来找零的,因为最大为20
        //能够用来找零的只有 5 和 10
        int[] nums = new int[2];//用来记录手里 5 和 10的总数
        for(int i = 0;i < bills.length;i++){
            if(bills[i] == 5){
                nums[0] += 5;//将5的数加上
            }else if(bills[i] == 20){
                //第一种方式:减一个10,一个5
                if(nums[1] >=10 && nums[0] >= 5){
                    //20不用记录;
                    nums[0] -= 5;
                    nums[1] -= 10;
                }
                //第二种情况:只有5
                else if(nums[0] >= 15 && nums[1] < 10){
                    nums[0] -= 15;
                }else return false;
            }else if(bills[i] == 10){
                if(nums[0] >= 5){
                    nums[1] += 10;
                    nums[0] -= 5;
                }else return false;
            }
        }
        return true;
    }
}

2)不用数组,只记录两个数

class Solution {
    public boolean lemonadeChange(int[] bills) {
        //20是不能拿来用来找零的,因为最大为20
        //能够用来找零的只有 5 和 10
        int num5 = 0;
        int num10 = 0;
        for(int i = 0;i < bills.length;i++){
            if(bills[i] == 5){
                num5++;//将5的数加上1
            }else if(bills[i] == 20){
                //第一种方式:减一个10,一个5
                if(num10 >= 1 && num5 >= 1){
                    //20不用记录;
                    num5--;
                    num10--;
                }
                //第二种情况:只有5
                else if(num5 >= 3){
                    num5 -= 3;
                }else return false;
            }else if(bills[i] == 10){
                if(num5 >= 1){
                    num10++;
                    num5--;
                }else return false;
            }
        }
        return true;
    }
}

你可能感兴趣的:(贪心,找零算法,贪心策略,柠檬水问题,动态规划,编程挑战)