题目:
题解:贪心算法
模拟整个操作过程,因为只会出现5,10,20的账单,所以只会存在以下三种情况:
- 账单是5,直接收下
- 账单是10,消耗一个5,增加一个10
- 账单是20,消耗一个10一个5,或者消耗三个5,增加一个20
前面两种情况,都不需要做其他处理,情况三需要有贪心策略,应该优先使用一个10和一个5去找零,因为10只能找零20,而5不仅能找零20还能找零10,所以5更加通用,应该尽可能多的消耗10保留5。
public boolean lemonadeChange(int[] bills) {
int count5 = 0;
int count10 = 0;
for (int bill : bills) {
if (bill == 5) {
count5++;
} else if (bill == 10) {
count10++;
count5--;
} else {
if (count10 > 0) {
count10--;
count5--;
} else {
count5 = count5 - 3;
}
}
if (count5 < 0) {
return false;
}
}
return true;
}
时间复杂度:O(n)