思路分析:
三种情况:顾客给5,不找零
顾客给10,找5
顾客给20,找10+5或5+5+5
先局部最优,顾客给20时,优先找10,完成本次找零。由局部最优推出全局最优:完成全部账单的找零。
class Solution{
public:
bool lemonadeChange(vector<int>& bills){
int five = 0,ten = 0,twenty = 0;
for(int bill : bills){
if(bill == 5)five++;
if(bill == 10){
if(five <= 0)return false;
ten++;
five--;
}
if(bill == 20){
//优先找10,5美元找零用处更大,留着,真没10了再用5
if(five > 0 && ten > 0){
five--;
ten--;
twenty++;//可以不写,20不会用来找零
}else if(five >= 3){
five -= 3;
twenty++;//可不写
}else return false;
}
}
}
return true;
};