太原网站开发模板,上海建筑设计院领导班子成员,微商代运营,免费的网页设计成品详解一#xff1a;题目
假设你是一位很棒的家长#xff0c;想要给你的孩子们一些小饼干。但是#xff0c;每个孩子最多只能给一块饼干。
对每个孩子 i#xff0c;都有一个胃口值 g[i]#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸#xff1b;并且每块饼干 j#xff…一题目
假设你是一位很棒的家长想要给你的孩子们一些小饼干。但是每个孩子最多只能给一块饼干。
对每个孩子 i都有一个胃口值 g[i]这是能让孩子们满足胃口的饼干的最小尺寸并且每块饼干 j都有一个尺寸 s[j] 。如果 s[j] g[i]我们可以将这个饼干 j 分配给孩子 i 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子并输出这个最大数值。
输入: g [1,2,3], s [1,1] 输出: 1 解释: 你有三个孩子和两块小饼干3个孩子的胃口值分别是1,2,3。 虽然你有两块小饼干由于他们的尺寸都是1你只能让胃口值是1的孩子满足。 所以你应该输出1。
输入: g [1,2], s [1,2,3] 输出: 2 解释: 你有两个孩子和三块小饼干2个孩子的胃口值分别是1,2。 你拥有的饼干数量和尺寸都足以让所有孩子满足。 所以你应该输出2.
二思路
这里体现出贪心的思想我们可以每次选择先让胃口最小的选择大于等于他的胃口的饼干接下来就是下一个人 那么这就是我们每次选取局部最优解也就是我们结果的最优解统计人数即欧克
三上码
class Solution {
public:int findContentChildren(vectorint g, vectorint s) {//贪心算法 每一步都是局部最优解://本题当中我们每次让胃口值最小的先满足找饼干正好大于等于胃口值的// 然后再找下一个正好满足下一个胃口值的 直到找不到为止sort(g.begin(),g.end());sort(s.begin(),s.end());// int j 0;// int cnt 0;// int num g.size() s.size() ? g.size() : s.size();// for(int i 0; i num; i){ // while(j s.size()){// if(g[i] s[j]){// cnt;// j;// break;// }// }// }// return cnt;int i 0,j 0;while(i g.size() j s.size()){//每次当s[j]中的值大于g[i]时候 i即一个孩子吃饱了 if(g[i] s[j]){i;}j;}return i;}
};