【LeetCode860】-柠檬水找零

实现思路

正常从前往后遍历bills数组,另开辟一个数组存储现在拥有的零钱,10元正常找零5即可,20元找零使用贪心的策略,先找10元、5元组合,没有这样的组合再尝试找3张5元的零钱

实现代码

class Solution {
    
    
public:
    bool lemonadeChange(vector<int>& bills) {
    
    
        vector<int> cur(21,0);
        for(int i=0;i<bills.size();i++){
    
    
            cur[bills[i]]++;
            if(bills[i]>5){
    
    
                int flag=0;
                if(bills[i]==10)
                {
    
    
                    if(cur[5]){
    
    
                    cur[5]--;
                    }
                    else return false;
                }
                else{
    
    
                    if(cur[5]&&cur[10]){
    
    
                        cur[5]--;
                        cur[10]--;
                    }
                    else if(cur[5]>=3){
    
    
                        cur[5]-=3;
                    }
                    else return false;
                }
            }
        }
        return true;
    }
};

在这里插入图片描述

两个代码的对比

我的第一个代码使用数组来进行标识,好处是可以直接利用面值来进行取值,坏处开辟了不必要的空间,可以直接像第二种代码那样用两个int类型的变量取值即可
第二个代码在处理20的地方方式更好,如果存在10元直接先找10元,剩下的可以统一用while循环来解决找5元零钱的问题

提交结果及分析

在这里插入图片描述

时间复杂度O(n)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/113794635