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

来源:互联网 发布:日本高考数学知乎 编辑:程序博客网 时间:2024/06/07 15:40

题干

这里写图片描述

原题网址:
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;    }};
原创粉丝点击