贪心算法 分配问题 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 g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j]. If s[j] >= g[i], 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.
Example 1:
Input: g = [1,2,3], s = [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.
Example 2:
Input: g = [1,2], s = [1,2,3]
Output: 2
Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
You have 3 cookies and their sizes are big enough to gratify all of the children,
You need to output 2.
Constraints:
1 <= g.length <= 3 * 104
0 <= s.length <= 3 * 104
1 <= g[i], s[j] <= 231 - 1

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        //贪心思路为,让孩子拿到能满足他的最小饼干
        //对s进行升序排序,每次遍历找到能满足的最小值,将其删除
        //对g进行升序排序,每次查找,当g[i]找不到时推出,因为比它大的一定也找不到
        //其实s中不用删除元素,直接指针向后就行,因为g也是升序排序的,s中前面的元素肯定不能满足g中后面的元素
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int j = 0;
        int res = 0;
        for(int i = 0; i < g.size(); i++){
            while(j < s.size() && s[j] < g[i]){
                j++;
            }
            if(j == s.size())
                return res;
            res++;
            j++;
        }
        return res;
    }
};

时间复杂度,除去排序是On,就是把s遍历一遍。

书中答案

在这里插入图片描述
写的更好看一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值