题干
原题网址:
https://leetcode.com/problems/assign-cookies/description/
知识点
贪心算法
题干解析
爸妈给小朋友分饼干。每个小朋友i都有对饼干大小的要求gi,他们只接受体积大于或等于自己的要求的饼干,而饼干数量也是有限的,每个饼干j大小为Sj。目标是要用这些有限的饼干尽量满足更多个小孩的需求(得到饼干的小孩的数量越多越好)。给你两个数组,第一个数组代表各个小孩对饼干大小的要求,第二个数组代表现在有的各个饼干的大小,要你输出最多能满足多少个小孩的需求。
解题思路
直观地来想,我们要用有限的饼干满足更多的小朋友的需求,那么我们就不能“浪费”我们的饼干。每个孩子都只接受体积大于或等于他的要求的饼干,完全不浪费的方法是每个饼干刚好满足那个孩子的需求,但是饼干的大小和孩子的需求并不存在一一对应的关系,所以我们只能尽量浪费得少一些,即分给小孩的饼干大于他的需求的差值最小化。如果我们分给一个小孩的饼干比他自己的需求大太多的话,直观上理解就是一种浪费。客观分析,假设这个孩子只需一块比这个饼干小得多的小饼干就满足了,这块大饼干可以给一个饭量更大(需求更大)的孩子,那么大小饼干就能一共满足两个小孩,但是现在小孩子拿了大饼干,而小饼干不能满足大孩子的需求,我们就只能满足一个小孩。
所以!我们可以采用的想法的,饼干一个个地分配,每分配一个饼干,查询需求大小小于这个饼干的体积的小孩,在这些小孩中找到一个需求最大的,将这块饼干分给他。全部分配完之后,就得到我们要的结果了。
代码
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
int ans = 0;
int index;
int cha;
for (int i = 0; i < s.size(); i++) {
cha = s[i] + 1;
index = -1;
for (int j = 0; j < g.size(); j++) {
if (g[j] != -1 && s[i] >= g[j] && (s[i] - g[j]) < cha) {
cha = s[i] - g[j];
index = j;
}
}
if (index != -1) {
g[index] = -1;
ans++;
}
}
return ans;
}
};