Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a greed factor gi, which is the minimum size of a cookie that the child will be content with; and each cookie j has a size sj. If sj >= gi, we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.
Note:
You may assume the greed factor is always positive.
You cannot assign more than one cookie to one child.
Example 1:
Input: [1,2,3], [1,1]
Output: 1
Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3.
And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content.
You need to output 1.
Example 2:
Input: [1,2], [1,2,3]
Output: 2
Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
You have 3 cookies and their sizes are big enough to gratify all of the children,
You need to output 2.
原创算法(runtime略靠后):
先将greed,size两个vector中的数据排序,然后再从greed前端开始依次从size-vector中(从大到小)去寻找“最小满足的size”,直至greed中有一个值无法从整个size-vector中找到合适的size.则此greed以后的所有
greed全都不可能找到满足的size了。从而可以得到合适的人数。
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int count = 0;
int glen = g.size();
int slen = s.size();
int j = 0;
for(; count < glen; count++){
int tag = 0;
for(; j < slen; j++){
if(g[count] <= s[j]){
tag = 1;
j++;
break;
}
}
if(tag == 0)
break;
}
return count;
}
};
方法二:
用一个while循环解决问题
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int glen = g.size();
int slen = s.size();
int count = 0;
int j = 0;
while(count < glen && j < slen){
if(g[count] <= s[j])
count++;
j++;
}
return count;
}
};