1、题目来源:
选自LeetCode 455:分发饼干
2、题目描述:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
注意:
你可以假设胃口值为正。
一个小朋友最多只能拥有一块饼干。
3、题目分析:
使用贪心算法,对孩子需求数组和饼干大小数组分别进行从小到大的排序。然后按照从小到大的顺序使用各个饼干尝试满足某个孩子,每个饼干只是用一次,若尝试成功的话,孩子个数加一,并换下一个孩子接着进行后面的尝试,直到发现没有更多的孩子或者没有更多的饼干为止,循环结束,返回此时的孩子个数。
4、代码实现
1 public int findContentChildren(int[] g, int[] s) { 2 // 先对两个数组进行从小到大的排序 3 Arrays.sort(g); 4 Arrays.sort(s); 5 int child = 0; 6 int cookie = 0; 7 /** 8 * 按照从小到大的顺序使用各个饼干尝试满足某个孩子,每个饼干只是用一次,若尝试 9 * 成功的话,孩子个数加一,并换下一个孩子接着进行后面的尝试,直到发现没有更多 10 * 的孩子或者没有更多的饼干为止,循环结束, 11 */ 12 while (child < g.length && cookie < s.length) { 13 //只有当孩子需求值小于或者等于饼干大小的时候,child指针才会加一 14 //这时候也就说明当前的饼干大小能够满足这个孩子的需求, 15 if (g[child] <= s[cookie]) { 16 child++; 17 } 18 /** 19 * 不管当前的饼干大小能不能满足孩子的需求,都要向后移动一位,当前若满足的话 20 * 用下一个饼干去尝试满足下一个孩子,如当前饼干不能满足的话,尝试用下一个饼干 21 * 去满足当前这个孩子 22 */ 23 cookie++; 24 } 25 return child; 26 }
6、提交运行