题目挺简单的,感觉不用什么算法就能写,是个模拟题,但是上面写的贪心,看了题解发现贪心是贪在这里。
- 5块 five++;
- 10块 ten–; five–;
- 20块有两种:five–;ten–; 和 five -= 3;
贪心在于5块既能找10块又能找20块,但是10块只能找20,所以我们给20找零的时候优先选择10块。
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
vector<int> v(3, 0);
for(int i : bills)
{
if(i == 5)
v[0]++;
else if (i == 10)
{
if(v[0] >= 1)
v[0]--;
else return false;
v[1]++;
}
else
{
if(v[0] >= 1 && v[1] >= 1)
{
v[0]--;v[1]--;
}
else if(v[1] < 1 && v[0] >= 3)
v[0] -= 3;
else return false;
//v[2]++;
}
}
return true;
}
};