2023.7.27
今天起福州要刮台风了,不过还是在宿舍坚持每日一题。
今天开始刷的系列属于贪心算法系列。本题是贪心算法的一个入门题。
贪心算法总体思路就是先找局部最优,在一步步的找出全局最优。 本题很明显全局最优就是 需要尽可能多投喂更多的孩子。 局部最优就是先将大饼干喂给胃口大的,尽可能先把大胃口的孩子满足,此时for循环需要遍历胃口。 下面看代码:
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
int ans = 0;
int index = s.size()-1;
sort(g.begin(),g.end());
sort(s.begin(),s.end());
for(int i=g.size()-1; i>=0; i--)
{
if(index>=0 && s[index] >= g[i])
{
ans++;
index--;
}
}
return ans;
}
};
另一种思路是尽可能将小饼干给喂出去,此时for循环遍历的是饼干。 值得注意的是s数组有可能为0,也就是可能没有饼干,一个孩子也没法喂,直接返回0。 下面看代码:
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
int ans = 0;
int index = 0;
sort(g.begin(),g.end());
sort(s.begin(),s.end());
if(s.empty()) return 0;
for(int i=0; i<s.size(); i++)
{
if(index<g.size() && g[index] <= s[i])
{
ans++;
index++;
}
}
return ans;
}
};