贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
这么说有点抽象,来举一个例子:
例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?
指定每次拿最大的,最终结果就是拿走最大数额的钱。
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。
这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。
public class leetcode_455 {
public static void main(String[] args) {
int[] g = {1, 2};
int[] s = {1, 2, 3};
System.out.println(meet(g, s));
}
public static int meet(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int j = s.length - 1;
int index = 0;
for (int i = g.length - 1; i >= 0; i--) {
if (j >= 0 && s[j] >= g[i]) {
j--;
index++;
}
}
return index;
}
}