分发饼干

  • Post author:
  • Post category:其他


假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子

i

,都有一个胃口值

g[i]

,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干

j

,都有一个尺寸

s[j]

。如果

s[j]

>=

g[i]

,我们可以将这个饼干

j

分配给孩子

i

,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。



示例1:

输入: g = [1,2,3], s = [1,1]

输出: 1

解释:

你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。

虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。

所以你应该输出1。



示例2:

输入: g = [1,2], s = [1,2,3]

输出: 2

解释:

你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。

你拥有的饼干数量和尺寸都足以让所有孩子满足。

所以你应该输出2.



解题思路



因为是要s值>=g值才算满足 可将

g[]



s[]

进行升序排序 然后进行逐个比较



s[]

的下标进行第一个循环 ,

g[]

进行第二个循环 循环内进行s值与g值的比较

eg:

g[1,2,3,4,2];

s[1,2,2,3,2]


期望输出 1+1+1+0+1=4


进行排序后

g[1,2,2,3,4]

s[1,2,2,2,3]


比较时,如果满足

s[i]

>=

g[j]


i++

;

j++

;

child++


否则

i

不变

j++


child

不变(

child

为满足条件的孩子数)

其中,每次进行比较的时候

j

的值不能从零开始,避免较大的s值与最小的

g[0]

进行重复比较

int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int child=0;
        int i=0,j=0;
        for(;i<s.size();i++)
            for(;j<g.size();)
            {       
            if(s[i]>=g[j]) {j++;child++;break;}
            else break;
            }
            return child;
    }

作者:xiao-sha-dan-9
链接:https://leetcode-cn.com/problems/assign-cookies/solution/pai-xu-bi-jiao-by-xiao-sha-dan-9-uo9o/
来源:力扣(LeetCode)



版权声明:本文为qianyinei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。