[Leetcode 455] Assign Cookies

题目描述:

Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a greed factor gi, which is the minimum size of a cookie that the child will be content with; and each cookie j has a size sj. If sj >= gi, we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.

Note:
You may assume the greed factor is always positive. 
You cannot assign more than one cookie to one child

EG1.

Input: (1,2,3), (1,1)

Output: 1

Explanation: You have 3 children and 2 cookies. The greed factors of 3 children are 1, 2, 3. 
And even though you have 2 cookies, since their size is both 1, you could only make the child whose greed factor is 1 content.
You need to output 1.


解题思路:首先我们将俩个数组进行排序,然后俩个i,j指针分别指向俩个数组开头,s数组一直往前走,当满足s[j]>=g[i]的时候,g数组指针加一,贪心的思想,代码如下:


c++代码:

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());  //每一个孩子分到离自己最近的那个即可
        sort(s.begin(),s.end());
        int i = 0,j = 0,res = 0,k;
        int len_g = g.size(),len_s = s.size();
        while(i<len_s&&j<len_g)
        {
            for(k = i;k<len_s;k++)
            {
                if(s[k]>=g[j])
                {
                    res++;
                    j++;
                    if(j>=len_g)
                        break;
                }
            }
            i = k;
        }
        return res;
    }
};

python代码:

class Solution(object):
    def findContentChildren(self, g, s):
        """
        :type g: List[int]
        :type s: List[int]
        :rtype: int
        """
        len_g = len(g)
        len_s = len(s)
        g.sort()
        s.sort()
        res = 0
        i = 0
        j = 0
    
        
        while i < len_s and j <len_g:
            for k in range(i,len_s+1):
                if k==len_s:         #它这里是取不到len_s的,如果你前面只是range(i,len_s)
                    break
                if g[j]<=s[k]:
                    res = res+1
                    j = j+1
                    if j >=len_g:
                        break
            i = k
        return res        



知乎主页:忆臻
专栏地址:机器学习算法
博客地址: 忆臻博客




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值