class Solution {
public boolean lemonadeChange(int[] bills) {
HashMap<Integer,Integer> map = new HashMap<>();
for(int i = 0; i < bills.length;i++){
if(bills[i] == 5) map.put(5,map.getOrDefault(5,0) + 1);
if(bills[i] == 10){
map.put(10,map.getOrDefault(10,0) + 1);
map.put(5,map.getOrDefault(5,0) - 1);
if(map.get(5) < 0) return false;
}
if(bills[i] == 20){
if(map.getOrDefault(10,0) > 0){
map.put(10,map.getOrDefault(10,0) - 1);
map.put(5,map.getOrDefault(5,0) - 1);
}else{
map.put(5,map.getOrDefault(5,0) - 3);
}
if(map.getOrDefault(5,0) < 0) return false;
}
}
return true;
}
}
粗略的想法,用map统计出现次数,出现20美元了,优先用10+5找零,因为5可以找零20和10。效率很低,优化一下。
class Solution {
public boolean lemonadeChange(int[] bills) {
int countFive = 0;
int countTen = 0;
for(int i = 0; i < bills.length;i++){
if(bills[i] == 5) countFive++;
if(bills[i] == 10){
countTen++;
countFive--;
}
if(bills[i] == 20){
if (countTen > 0){
countTen--;
countFive--;
}else{
countFive -= 3;
}
}
if(countFive < 0) return false;
}
return true;
}
}
。。。别用HashMap就好了