LeetCode455. 分发饼干

题目

分析一

直接类似双指针比较,本质就是贪心,小饼干给小的胃口,贪心小胃口

代码一

 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 };

本题贪心,根据常识易得出:大饼干分给大胃口的孩子,会使分发的人数最多

posted @ 2021-02-03 16:09  Uitachi  阅读(68)  评论(0编辑  收藏  举报