代码随想录 Q84.分发饼干

思路一:优先考虑胃口,大饼干先喂饱大胃口
1.为了满足更多的小孩,就不要造成饼干尺寸的浪费。
2.大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。
3.局部最优和全局最优
(1)局部最优:把大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个。
(2)全局最优:喂饱尽可能多的小孩。
4.贪心策略:
(1)先将饼干数组和小孩数组排序。
(2)从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩的数量(注意是for循环遍历小孩数组,而不能遍历饼干数组,因为for循环的下标i是固定移动的,而if里面的下标index是符合条件才移动的)。

5.注意:
(1)如果for控制的是饼干,if控制的是胃口,就会出现如下情况,不可行:

(2)本题使用一个for循环控制小孩数组的遍历,一个index控制饼干数组的遍历即可,遍历饼干不需要再使用一个for循环(逻辑会变得更复杂),而是采用了自减的方式。
附代码:
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0;int index = s.length - 1;//遍历胃口for(int i = g.length - 1;i >= 0;i--){if(index >= 0 && g[i] <= s[index]){index --;count ++;}}return count;}
}
思路二:优先考虑饼干,先把小饼干喂给小胃口
附代码:
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int index = 0;int count = 0;for(int i = 0;i < s.length && index < g.length;i++){if(s[i] >= g[index]){index ++;count ++;}}return count;}
}
