leetcode hot100分发饼干

leetcode hot100分发饼干_第1张图片
在本题中,我们需要采用贪心算法。考虑局部最优解,然后再考虑全局最优解。

比如,在本题中,我们先把胃口和饼干排序,排序之后我们可以采用用大饼干来喂大胃口的孩子,如果此时能满足,那么计数加一;如果不能满足,那就用这个饼干去喂胃口稍微小一点的孩子,以此类推。

注意,在本题中,以胃口为for循环进行遍历,无论当前饼干是否满足胃口,都会走到下一个孩子处,如果满足,那么饼干也选择下一个,如果不满足,就用当前饼干去喂下一个孩子。

这就是倒序的遍历,以胃口为遍历条件,无论怎样都移动胃口,然后根据是否满足条件,来移动饼干。

class Solution {
    // 思路2:优先考虑胃口,先喂饱大胃口
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int count = 0;
        int start = s.length - 1;
        // 遍历胃口
        for (int index = g.length - 1; index >= 0; index--) {
            if(start >= 0 && g[index] <= s[start]) {
                start--;
                count++;
            }
        }
        return count;
    }
}

也可以遍历饼干,用小饼干去满足小胃口,

class Solution {
    // 思路1:优先考虑饼干,小饼干先喂饱小胃口
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int start = 0;
        int count = 0;
        for (int i = 0; i < s.length && start < g.length; i++) {
            if (s[i] >= g[start]) {
                start++;
                count++;
            }
        }
        return count;
    }
}

你可能感兴趣的:(leetcode,算法,职场和发展)