leetcode455

leetcode455

这个题目是”assign cookies”,即给小孩子们发cookies, 但是每个小孩子都有一个贪婪系数,如果cookies的size超过这个贪婪系数的话,他才会感到满意,所以现在要求最多会有多少个孩子满意。

比如 输入是[1,2,3],[1,1]的时候,那输出就是1,因为就会有一个孩子满意。

解决方案

先将cookies和每个孩子的贪婪系数都排一个顺序,然后再拿每一个cookie去问child,如果他满意,下次就直接问下一个孩子,并且同时总数量加1,注意用一个变量就可以了。因为最终问到的地方就是满意的数量。

python


class Solution(object):
    def findContentChildren(self, g, s):
        """
        :type g: List[int]
        :type s: List[int]
        :rtype: int
        """
        if len(g)==0 or len(s)==0:
            return 0
        g = sorted(g)
        s = sorted(s)
        num = 0  # num 其实代表的就是第几个满意的kid, 最终返回的这个就是所有满意的个数了. 
        for i in range(len(s)):
            # 拿着cookie去问孩子们
            # 判断有没有问完所有的kids
            if num > len(g)-1:
                break
            if s[i]>=g[num]:  # 如果当前这个满足的话,就加1,然后下次就直接问下一个。
                num += 1
            
                  
        return num
            
            

c++

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int num=0;
        for(int i=0;num<g.size()&&i<s.size();i++){
            if(s[i]>=g[num]){
                num++;
            }
        }
        return num;
        
    }
};

其中sortstd中的函数,可以像下面这样用

#include <iostream>

int main(){
    int a[4] = {4,1,2,9};
    std::sort(a,a+4);
    for(int i=0;i<4;i++){
        std::cout<<a[i]<<std::endl;
    }   

    return 0;
}

如果改成下面的话

#include <iostream>

int main(){
    int a[4] = {4,1,2,9};
    std::sort(a+1,a+4);
    for(int i=0;i<4;i++){
        std::cout<<a[i]<<std::endl;
    }   

    return 0;
}

结果就会变成4129.

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦