题目链接
455. 分发饼干 - 力扣(LeetCode)
2410. 运动员和训练师的最大匹配数 - 力扣(LeetCode)
题目描述
孩子有n
个,g[i]
表示n
个孩子中第i
个孩子胃口值。
饼干有m
块,s[j]
表示m
块饼干中第j
块饼干的尺寸。
每个孩子只能吃一块饼干,用来满足自己的胃口(s[j]>=g[i]
才可以分给孩子吃),输入固定的孩子和饼干数组,问可以满足孩子的最大数量。
输入输出样例
1 2
| 输入: g = [1,2], s = [1,2,3] 输出: 2
|
题目解释
胃口最小的孩子最容易吃饱,优先考虑胃口最小的孩子。
或者优先考虑胃口最大的孩子,但是需要分给他最大的饼干,因为一个孩子只能分给一个孩子,所以不会浪费
官方题解:455. 分发饼干 - 力扣(LeetCode)
代码
个人实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g.end(), greater<int>()); sort(s.begin(), s.end(), greater<int>());
int childrenIndex = g.size() - 1, cookiesIndex = s.size() - 1; int count = 0;
while (cookiesIndex >= 0 && childrenIndex >= 0) { if (s[cookiesIndex--] >= g[childrenIndex]) { count++; childrenIndex--; } }
return count; } };
class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g.end(), less<int>()); sort(s.begin(), s.end(), less<int>()); int childrenIndex = 0, cookiesIndex = 0; int count = 0; while (cookiesIndex < s.size() && childrenIndex < g.size()) { if (s[cookiesIndex++] >= g[childrenIndex]) { count++; childrenIndex++; } } return count; } };
|
官方实现
作者:力扣官方题解
链接:https://leetcode.cn/problems/assign-cookies/solutions/534281/fen-fa-bing-gan-by-leetcode-solution-50se/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g.end()); sort(s.begin(), s.end()); int m = g.size(), n = s.size(); int count = 0; for (int i = 0, j = 0; i < m && j < n; i++, j++) { while (j < n && g[i] > s[j]) { j++; } if (j < n) { count++; } } return count; } };
|