1.分发饼干
对于每个孩子 i ,都有一个胃口值 g[i] ,这是能让孩子们满足胃口的饼干的最小尺寸;
每块饼干 j ,都有一个尺寸 s[j] 。如果 s[j] >= g[i] ,我们可以将这个饼干分给孩子 i,使他得到满足。
目标是最可能满足越多数量的孩子,并输出这个最大数值。
示例1:输入 g = [1,2,3],s=[1,1]
输出 解释:有3个孩子和2块饼干,3个孩子的胃口值分别是:1,2,3。虽然只有两块小饼干,由于他们的尺寸都是1,因此只能让胃口是1的孩子满足。因此输出1。
示例2:输入 g = [1,2],s = [1,2,3]
输出 解释:有2个孩子和3块饼干,两个孩子的胃口值分别为1,2。拥有的饼干可以让所有的汉字满足,因此输出2。
1.1 思路如下
1.首先对孩子的胃口值和饼干尺寸均按从小到大进行排序。
2.遍历饼干尺寸数组,判断当前饼干是否满足当前孩子的胃口值。如果满足,判断下一个孩子和饼干尺寸;如果不满足,仅仅遍历饼干尺寸数组的下一个值。
3.遍历完饼干数组,算法结束,此时孩子胃口数组的下标就是已经满足孩子的数量。
1.2 代码实现
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
// 对饼干数组s进行升序排序
sort(s.begin(), s.end());
// 对孩子的胃口值数组g进行升序排序
sort(g.begin(), g.end());
// 初始化满足孩子数量为0
int index = 0;
// 遍历饼干数组
for (int i = 0; i < s.size() && index < g.size(); i++) {
// 当饼干尺寸大于等于孩子胃口值时
if (s[i] >= g[index]) {
// 满足孩子数量加1,继续尝试满足下一个孩子
index++;
}
}
// 返回满足孩子数量
return index;
}
};
通过贪心策略,我们总是尽可能地将尺寸适中的饼干分配给胃口较小的孩子,这样能够最大限度地满足更多的孩子。