leedcode每日一題:860. 檸檬水找零

不會寫程式碼的程式設計師ctt發表於2020-12-10

一、題目描述

在檸檬水攤上,每一杯檸檬水的售價為 5 美元。
顧客排隊購買你的產品,(按賬單 bills 支付的順序)一次購買一杯。
每位顧客只買一杯檸檬水,然後向你付 5 美元、10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。
注意,一開始你手頭沒有任何零錢。
如果你能給每位顧客正確找零,返回 true ,否則返回 false 。

二、題解
方法:模擬+貪心
貪心體現在,當收到20塊給顧客找零是,優先給顧客找10+5,因為5元的用到的地方更多。

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        
        if(bills.size()==0||bills[0]!=5)
            return false;
        
        int cnt_5=0;
        int cnt_10=0;
        for(int i=0;i<bills.size();i++){
            if(bills[i]==5){
                cnt_5++;
            }else if(bills[i]==10){
                if(cnt_5>0){
                    cnt_5--;
                    cnt_10++;
                }
                else
                    return false; 
            }else{
                if(cnt_5>0&&cnt_10>0){
                    cnt_5--;
                    cnt_10--;
                }else if(cnt_5>2)
                    cnt_5-=3;
                else
                    return false;
            }
        }
        return true;
    }
};

相關文章