本题的题意是有m个小孩,每个小孩都有一个对饼干大小(cookie)的最小需求量;同时,有n块饼干,每块饼干都有自己的大小;每个小孩最多只能分得一块饼干;最后,求能够得到满足的孩子的最大数量。
我采用贪心算法来解此题。首先,将代表孩子们的最小需求量的数组和代表饼干大小的数组进行升序排序;然后,按序遍历每一个孩子的最小需求量,对每一个最小需求量,选取当前未被分配的饼干中最小且能够满足当前孩子的需求量的饼干进行分配,直到为每个孩子都分配了饼干或者最大的饼干也无法满足当前的需求量时返回结果,结果就是得到满足的孩子的数量,并且这个数量是最大的。
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
if (g.empty() || s.empty()) {
return 0;
}
/*for (int i = 0; i < g.size() - 1; ++i) {
int k = i;
for (int j = k + 1; j < g.size(); ++j) {
if (g[k] > g[j]) {
k = j;
}
}
int temp = g[i];
g[i] = g[k];
g[k] = temp;
}*/
/*for (int i = 0; i < s.size() - 1; ++i) {
int k = i;
for (int j = k + 1; j < s.size(); ++j) {
if (s[k] > s[j]) {
k = j;
}
}
int temp = s[i];
s[i] = s[k];
s[k] = temp;
}*/
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int i = 0;
for (int j = 0; i < g.size() && j < s.size(); ++i, ++j) {
while (j < s.size() && g[i] > s[j]) {
++j;
}
if (j == s.size()) {
break;
}
}
return i;
}
};