1 贪心算法(使用undered_map)
class Solution {
private:
unordered_map<int, int> map;
public:
bool lemonadeChange(vector<int>& bills) {
if (bills[0] > 5) return false;
for (auto& b : bills) {
map[b] ++;
if (b == 10) {
if (map[5] < 1) return false;
map[5] --;
}
if (b == 20) {
if ((map[10] < 1 && map[5] < 3) || (map[10] > 0 && map[5] < 1))
return false;
if (map[10] > 0) {
map[10]--;
map[5]--;
} else
map[5] -= 3;
}
}
return true;
}
};
2 贪心算法(使用基本计数器)
由于题目只有5,10,20
,所以可以手动设置3
个计数器而不用数据结构,但通用情况下,还是建议使用容器
【注意】初始化计数器时,一定要这样
int five = 0, ten = 0;
而不要偷懒,这样
int five, ten;
因为有的编译器会自动初始化0,而有的编译器直接随机取值,导致结果不同
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
if (bills[0] != 5) return false;
int five = 0, ten = 0;
for (auto& b : bills) {
if (b == 5) five++;
if (b == 10) {
if (five < 1) return false;
ten++;
five--;
}
if (b == 20) {
if (ten > 0 && five > 0) {
ten--;
five--;
} else if (ten < 1 && five >= 3)
five -= 3;
else return false;
}
}
return true;
}
};