leetcode 455 分发饼干 贪心算法

核心思路:

给一个孩子的饼干应当尽量小并且又能满足该孩子,这样大饼干才能拿来给满足度比较大的孩子。
因为满足度最小的孩子最容易得到满足,所以先满足满足度最小的孩子。

贪心算法
在以上的解法中,我们只在每次分配饼干时选择一种看起来是当前最优的分配方法,但无法保证这种局部最优的分配方法最后能得到全局最优解。我们假设能得到全局最优解,并使用反证法进行证明,即假设存在一种比我们使用的贪心策略更优的最优策略。如果不存在这种最优策略,表示贪心策略就是最优策略,得到的解也就是全局最优解。

假设一个孩子的胃口是1,我们有1和2两个大小的饼干,如果把2给这个孩子,则如果后面还有胃口为2的孩子则没有饼干能给;而先用尽量小的饼干去满足孩子,这样才能满足胃口比较大的孩子。

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        if(g.length==0||s.length==0) return 0;
        Arrays.sort(g);
        Arrays.sort(s);
        int g1=0,s1=0;
        while(g1<g.length&&s1<s.length){
            //如果只剩下饼干或者只剩下孩子都没有继续计算下去的意义
            if(g[g1]<=s[s1]){
                g1++;
                //如果能够满足当前孩子的胃口,则计数,如果不能满足则将饼干指针往后移,用更大的饼干                 //去试图满足当前孩子的胃口
            }
            s1++;//向后移动饼干,要么由于该孩子已被满足,要么由于之前的饼干太小,现在用下一个更大的
                    //饼干尝试
        }
        return g1;

    }
}

注意:

用的是Arrays.sort进行快排,而不是Array。

原文地址:https://www.cnblogs.com/sjh-dora/p/12867483.html