【力扣】分发饼干

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

对每个孩子 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。


一、代码分析

解决思路:排序+贪心

def findContentChildren(self, g: List[int], s: List[int]) -> int:
    g.sort()  #孩子排序
    s.sort()  #饼干排序
    res = 0  #res记录能分给几个孩子
    flag = 0  #flag 记录饼干给孩子后,下一个饼干的下标
    for i in range(len(g)):
        for j in range(flag,len(s)): #没有if的话正常+1,进入if中记录能填充g[i]孩子的下一块饼干的下标
            if g[i] <= s[j]: #判断当前饼干能否填饱肚子
                res += 1   #又多了一个孩子能吃饱
                flag = j + 1 #注意这里要加1是当前饼干的下一个的下标,不加1会重复计算
                break  #找到的话就break看下一个孩子的饥饿度
    return res

二、注意

  • 设置flag变量,目的是为了标志找到可以填饱孩子的饼干的下标的下一个,接下来的循环将从下一个找起
  • 排序是方便有先满足最小饥饿度的孩子,尽量满足最多孩子能吃饱
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值