题目描述:
思路:
排序+双指针+贪心
贪心策略体现在哪里呢?
我们想满足尽可能多的孩子的胃口,那么我们的贪心策略就是:饼干尺寸和数量一定的情况下,先满足胃口小的孩子。并且尽量保证饼干尺寸刚好能够满足孩子的胃口!
具体实现:
1.先对孩子胃口和饼干尺寸从小到大排序。
2.从最小胃口的孩子开始,找一块刚好可以满足(刚好>=这个孩子胃口)的饼干。
3.最后满足了几个孩子的胃口,返回满足的孩子数即可!(因为如果当前孩子胃口都没有满足的话,他后面胃口比他大的孩子的胃口,当前的饼干一定无法满足!)
代码以及注释:
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
# 对孩子胃口进行排序
g.sort()
# 对饼干尺寸进排序
s.sort()
i = 0
j = 0
# 双指针同时遍历
while (i < len(g) and j < len(s)):
# 当前饼干尺寸满足了当前孩子的胃口
if s[j] >= g[i]:
i += 1
j += 1
else:
j += 1
# 返回被满足胃口的孩子数
return i
运行结果:
优化后的代码:
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
# 对孩子胃口进行排序
g.sort()
# 对饼干尺寸进排序
s.sort()
i = 0
j = 0
# 双指针同时遍历
while (i < len(g) and j < len(s)):
# 当前饼干尺寸满足了当前孩子的胃口
if s[j] >= g[i]:
i += 1
# 无论走哪个分支都会执行此句代码
j += 1
# 返回被满足胃口的孩子数
return i