输入:[5,5,5,10,20] 输出:true
输入:[10,10] 输出:false
这里贪心算法涉及了最优解, 当顾客来了20块,那么先用10+5来找,因为尽可能留多一点5块给来10块的找。
public class leetcode20 {
public static void main(String[] args) {
int[] custom=new int[]{5,5,5,10,10,10,20};
System.out.println(lemonadeChange(custom));
}
public static boolean lemonadeChange(int[] array){
//先定义手头可找零5块和10块的数量,20就不用定了,因为20不可能给别人找零
int five=0,ten=0;
for (int money : array) {
if (money == 5){
five++;
}else if (money==10){
//如果来的是10块
if (five == 0){
return false;
}
five--;
ten++;
}else {
//如果来的是20块
//贪心局部最优解 先找10+5,不行再找3张5块
if (five >0 && ten>0){
five--;
ten--;
}else if (five>=3){
five=five-3;
}else {
return false;
}
}
}
//默认能找就返回true
return true;
}
}