题目:
不会真的有人圣诞节还在做题吧,不会吧不会吧。
不过还好题目简单,不然就破防了。
思路:
1.这题应用的是贪心算法,体现在我们对于每一块饼干,都需要去找到刚好或者只小一点胃口的孩子。有点类似于计算机操作系统中的最优空间分配法。
2.那么为了需要找到刚好或者是只小一点胃口的孩子,我们就需要这两个序列有序,用sort函数处理即可。
3.然后,使用两个指针,对于每一块饼干(因为饼干是资源,饼干分配完就应该结束程序输出结果),假如它不满足当前孩子的胃口,则找到能满足的那块饼干。前面的这些较小饼干就全部废弃了。(因为胃口经过排列,后续孩子的胃口只可能更大)
大致思路就是这样,接下来编码即可。
C++代码附带测试
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int i = 0;//饼干
int j = 0;//孩子
int sum = 0;//满足个数
while(i<s.size()&&j<g.size())
{
while(i<s.size()&&s[i]<g[j])//找到第一个能满足第一个孩子胃口的饼干
{
i++;
}
if(i<s.size()&&s[i]>=g[j])
{
sum++;
}
i++;
j++;
}
return sum;
}
};
int main()
{
vector<int> g = {1,2};
vector<int> s = {1,2,3};
Solution solution;
cout<<solution.findContentChildren(g,s)<<endl;
}
今天发现sort函数如何快速选择降序排列还是升序排列,另写一篇博客讨论;