这道题的大概意思是 商家本省没有钱 只靠顾客来找钱
假如第一个顾客 给了5块钱 现在商家就有了五块钱 第二个顾客来买水喝 除了20的找不开 5 ,跟10都能找开 本题的贪心策略就在于 找20 的时候 只用一张五块的跟一张十块的就能找开了 不用三张五块的
局部最优解 不影响其他的解
package 贪心;
public class LeamonChange {
//柠檬水找零 贪心算法
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(change(new int[]{5,5,20} ));
}
private static boolean change(int[] bills) {
// TODO Auto-generated method stub
int five=0,ten=0; //没有必要写20 的 应为谁都找不开
for(int bill:bills){ //遍历数组
//判断第一张是否是五块的 是五块的就返回true five++ 否则就返回false
//应为 自己本来就没钱 没法找
if(bill==5){
five++;
}else if(bill==10){
if(five>0){
five--;
ten++;
}else{
return false;
}
}else{
if(bill==20){
if(five>1 && ten>1){ //这样一张5 块的 一张10快的是局部最优解 不影响其他
five--;
ten--;
}else if(five >3){
five-=3;
}else{
return false;
}
}
}
}
return true;
}
}