力扣原題鏈接,點擊跳轉。
假設你的手里沒有錢。你要賣檸檬水,每杯5塊錢。每個顧客有可能會給你5塊錢、10塊錢或20塊錢,你要拿手中的錢找零。如何判斷你能否成功找零呢?
如果一上來就有顧客花10塊錢或20塊錢,你手中沒有錢,自然無法找零。我們考慮一下能找零的情況。如果有顧客花10塊錢,你就要找5塊錢,如果你手里沒有5塊錢,則找零失敗。如果有顧客花20塊錢,你可以找一張10塊錢和一張5塊錢,或者三張5塊錢。如果是你,你會選擇一張10塊錢和一張5塊錢,還是三張5塊錢呢?顯然,10塊錢的作用并不大,只有顧客花20塊錢時,才有可能用作找零;但是5塊錢的作用就非常大了,不管顧客花10塊錢還是20塊錢,都有可能用作找零。所以,我們應盡可能把作用不大的10塊錢花出去,把作用較大的5塊錢留在手里,這就是貪心策略。換句話說,我們優先考慮10+5,如果不行,再考慮5+5+5,如果還不行,那就找零失敗。
class Solution
{
public:bool lemonadeChange(vector<int>& bills){int five = 0, ten = 0;for (auto bill : bills){if (bill == 5){five++;}else if (bill == 10){if (five == 0){return false;}five--;ten++;}else{// 貪心,10+5優先于5*3if (five && ten){five--;ten--;}else if (five >= 3){five -= 3;}else{return false;}}}return true;}
};