假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子 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变量,目的是为了标志找到可以填饱孩子的饼干的下标的下一个,接下来的循环将从下一个找起
- 排序是方便有先满足最小饥饿度的孩子,尽量满足最多孩子能吃饱