找零钱,先找面值大的,再找面值小的
版本1
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int fives = 0, tens = 0; //开始的时候5元和10元的数量都没有
for(auto b: bills){
if(b == 5){
fives++;
}else if(b == 10){
if(fives){
fives--;
tens++;
}else return false;
}else{
int t = 15;
if(tens) tens--, t -= 10; //注意这里只是个条件判断 并不能跟后面的代码构成互斥
while(t && fives){
fives--;
t -= 5;
}
if(t) return false;
}
}
return true;
}
};
版本2
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int fives = 0, tens = 0; //优先用10块的
for(auto b: bills){
if(b == 5) fives++; //5块
else if(b == 10){ //10块
if(fives) fives--;
else return false;
tens++;
}else{ //20块
int t = 15;
if(tens){
tens--;
t -= 10;
}
while(t && fives){
t -= 5;
fives--;
}
if(t) return false;
}
}
return true;
}
};