LeetCode-455-分发饼干-贪心算法

题目描述:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

LeetCode-455-分发饼干-贪心算法_第1张图片

解题思路:贪心算法,根据局部最优推全局最优

  1. 将胃口数组和饼干数组都排序;
  2. 遍历数组,统计可以喂饱小孩的个数。注意从最大的饼干开始遍历,循环有两层,一个循环是满足了才能走下一个的,就是饼干数组 s,一个是可以一直重复走的,即胃口数组 g,这点要区分好。

代码实现

class Solution {
    /**
     * 分发饼干
     * @param g 胃口数组
     * @param s 饼干数组
     * @return
     */
    public int findContentChildren(int[] g, int[] s) {
        // 对两个数组排序
        Arrays.sort(g);
        Arrays.sort(s);
        int lenG = g.length;
        int res = 0;// 能喂饱小孩的个数
        // 由局部最优推全局最优,此处从最大的饼干开始遍历
        int sIndex = s.length-1;
        for (int i = lenG-1; i >=0 ; i--) {// 遍历g[]
            if (sIndex>=0 && s[sIndex] >= g[i]){// 遍历s[]
                // System.out.println(sIndex);
                res += 1;
                sIndex--;
            }
        }
        return res;
    }
}

你可能感兴趣的:(LeetCode,leetcode,贪心算法,算法)