题目
思路:
一共只有三种钱币,5元,10元和20元;能不能成功找零取决于自己兜里这三种钱币的数量;其实只看两种,5元和10元,因为20元找零15,因此找零的时候根本用不上20;因此只需要每次找零更新5和10元的数量就可以了;
遇到5元时:不需找零,直接5元的数量+1
遇到10元时,要是没有5元了,无法找零,说明失败
遇到20元时,两种找零策略:找3个5,或是一个10,一个5;而这里就体现出了贪心算法,如果我们有一张 10 美元和一张 5 美元,那么我们总会更愿意这样找零,这比用三张 5 美元进行找零更有利。因此优先10+5,不行再5+5+5;
代码
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int five,ten;
five=0;
ten=0;
for(int i=0;i<bills.size();i++)
{
switch(bills[i]){
case 5:five++;
break;
case 10:{
if(five==0)
return false;
five--;
ten++;
}
break;
case 20:{
if(five!=0&&ten!=0)
{
five--;
ten--;
}
else if(five>=3)
{
five-=3;
}
else
return false;
}
break;
}
}
return true;
}
};
效率不咋的啊。。。