分发饼干

1、题目来源:

  选自LeetCode 455:分发饼干

2、题目描述:

  假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 s。如果 sj >= g,我们可以将这个饼干 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、提交运行

原文地址:https://www.cnblogs.com/BaoZiY/p/10692511.html