题目
分析一
直接类似双指针比较,本质就是贪心,小饼干给小的胃口,贪心小胃口
代码一
1 class Solution { 2 public: 3 int findContentChildren(vector<int>& g, vector<int>& s) { 4 sort(g.begin(),g.end()); 5 sort(s.begin(),s.end()); 6 int res = 0; 7 int i = 0,j = 0; 8 while(i < s.size() && j < g.size()){ 9 if(s[i] >= g[j]) {res++;i++;j++;} 10 else i++; 11 } 12 return res; 13 } 14 };
分析二(与分析一正好相反)贪心最大胃口
大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。
代码二
1 class Solution { 2 public: 3 int findContentChildren(vector<int>& g, vector<int>& s) { 4 sort(g.begin(),g.end()); 5 sort(s.begin(),s.end()); 6 int res = 0; 7 int index = s.size()-1;//最大饼干,应给最大胃口 8 for(int i = g.size()-1;i >= 0;i--){ 9 if(index >= 0 && s[index] >= g[i]){ 10 index--; 11 res++; 12 } 13 } 14 return res; 15 } 16 };
本题贪心,根据常识易得出:大饼干分给大胃口的孩子,会使分发的人数最多