LeetCode#455 Assign Cookies题解(C++版)

题干

这里写图片描述

原题网址:
https://leetcode.com/problems/assign-cookies/description/

知识点

贪心算法

题干解析

爸妈给小朋友分饼干。每个小朋友i都有对饼干大小的要求gi,他们只接受体积大于或等于自己的要求的饼干,而饼干数量也是有限的,每个饼干j大小为Sj。目标是要用这些有限的饼干尽量满足更多个小孩的需求(得到饼干的小孩的数量越多越好)。给你两个数组,第一个数组代表各个小孩对饼干大小的要求,第二个数组代表现在有的各个饼干的大小,要你输出最多能满足多少个小孩的需求。

解题思路

直观地来想,我们要用有限的饼干满足更多的小朋友的需求,那么我们就不能“浪费”我们的饼干。每个孩子都只接受体积大于或等于他的要求的饼干,完全不浪费的方法是每个饼干刚好满足那个孩子的需求,但是饼干的大小和孩子的需求并不存在一一对应的关系,所以我们只能尽量浪费得少一些,即分给小孩的饼干大于他的需求的差值最小化。如果我们分给一个小孩的饼干比他自己的需求大太多的话,直观上理解就是一种浪费。客观分析,假设这个孩子只需一块比这个饼干小得多的小饼干就满足了,这块大饼干可以给一个饭量更大(需求更大)的孩子,那么大小饼干就能一共满足两个小孩,但是现在小孩子拿了大饼干,而小饼干不能满足大孩子的需求,我们就只能满足一个小孩。
所以!我们可以采用的想法的,饼干一个个地分配,每分配一个饼干,查询需求大小小于这个饼干的体积的小孩,在这些小孩中找到一个需求最大的,将这块饼干分给他。全部分配完之后,就得到我们要的结果了。

代码

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        int ans = 0;
        int index;
        int cha;
        for (int i = 0; i < s.size(); i++) {
            cha = s[i] + 1;
            index = -1;
            for (int j = 0; j < g.size(); j++) {
                if (g[j] != -1 && s[i] >= g[j] && (s[i] - g[j]) < cha) {
                    cha = s[i] - g[j];
                    index = j;
                }
            }
            if (index != -1) {
                g[index] = -1;
                ans++;
            }
        }
        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值