分发饼干

要求饼干能够满足尽可能多的孩子的胃口。 局部最优解是每次找出尺寸最大的饼干,尝试满足胃口最大的孩子。

如果不满足,还是拿着最大的饼干,满足胃口次一些的孩子,循环这个过程。

var findContentChildren = function (g, s) {
    //大饼干尽量先满足胃口大的
    g = g.sort((a, b) => a - b)
    s = s.sort((a, b) => a - b)
    //反向遍历,从最大饼干能够满足的位置开始
    let index = s.length - 1, res = 0
    for (let i = g.length; i >= 0; i--) {
        if (index >= 0 && s[index] >= g[i]) {
            res++
            index--
        }
    }
    return res
};

本题也可改成小尺寸饼干先满足胃口小的孩子,但是for循环应该遍历饼干尺寸而if控制孩子胃口。


var findContentChildren = function (g, s) {
//小饼干先满足胃口小的
    g = g.sort((a, b) => a - b)
    s = s.sort((a, b) => a - b)
    let index = 0, res = 0
    for (let i = 0; i < s.length; i++) {
        if (index < g.length && s[i] >= g[index]) {
            res++
            index++
        }
    }
    return res
};

从满足小胃口的孩子开始的时候,发现for循环控制的从孩子的胃口变成了饼干。

简单梳理一下,当最小的饼干不能满足胃口最小的孩子的时候,应该尝试用更大一点的饼干去满足。而不是使用这个最小的饼干去满足胃口更大的孩子。

因此此时for循环应该控制的是饼干的尺寸。

上次更新:: 2023/5/2 20:39:46