【455.分发饼干】
贪心算法需要先找到局部最优,然后再找全局最优。
在这个题目里面,局部最优就是用大尺寸的饼干尽可能地满足胃口大的小孩。
需要先将数组排序,然后从数组末端依次比较饼干尺寸和小孩的胃口。如果满足就让结果加1,再比较前面一位饼干是否可以满足前面一个小孩。
for循环的逻辑中:
for(int i = g.size()-1; i >= 0; i--)
i为孩子胃口的下标。
index为饼干的下标,这两个下标是独立的。
此外,在判断条件中有两点需要注意:
饼干size大于等于孩子胃口
饼干的index首先要大于0(可能会出现饼干index小于0的情况,这个时候不应该进行比较)
所有代码如下:
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(),s.end());
int index = s.size() - 1; //饼干数组的下标
int result = 0;
for(int i = g.size()-1; i >= 0; i--){
if(index >= 0 && s[index] >= g[i]){
result++;
index--;
}
}
return result;
}
};
贪心法初体验:
感觉这道题目的局部最优和全局最优没有很复杂,体现不出贪心的独特性。