题目
455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
注意:
你可以假设胃口值为正。
一个小朋友最多只能拥有一块饼干。
解答
代码
①一开始的代码:
class Solution(object):
def findContentChildren(self, g, s):
"""
:type g: List[int]
:type s: List[int]
:rtype: int
"""
i=0
count=0
s.sort()
while i<len(s):
if g and s:
gg=g.index(min(g))
if s[i]>=g[gg]:
s.pop(i)
g.pop(gg)
count+=1
else:
i+=1
else:
return count
return count
②后来:
class Solution(object):
def findContentChildren(self, g, s):
"""
:type g: List[int]
:type s: List[int]
:rtype: int
"""
i=0
j=0
count=0
g.sort()
s.sort()
while i<len(s):
if j<len(g):
if s[i]>=g[j]:
s.pop(i)
g.pop(j)
count+=1
else:
i+=1
else:
return count
return count
③最后:
class Solution(object):
def findContentChildren(self, g, s):
"""
:type g: List[int]
:type s: List[int]
:rtype: int
"""
i=0
j=0
count=0
g.sort()
s.sort()
ss=len(s)
gg=len(g)
while i<ss and j<gg:
if s[i]>=g[j]:
i+=1
j+=1
count+=1
else:
i+=1
return count
思路
- ①一开始的思路:
给小饼干从小到大排序,并遍历小饼干:每次寻找食量最小的孩子并判断是否能满足他,满足则把此小饼干和小朋友去除考虑范围,接着遍历。 - ②后来:
做完发现用时太长了,考虑到这题归纳于我们打卡的贪心算法里,便去翻题解里的思路,发现与其我每次都要找食量最小的小朋友,还不如连他也一起在最开始就排好序(想到这里,发现刚刚的自己宛如一个智障) - 其实自己一开始的思路应该是符合贪心算法的,只是没有注意细节处理,修改完后,emm击败率稍微能看一些了。
- ③最后:
其实我还是觉得击败率太低了,得再修改一下,比如 pop 函数和两层层 if 以及 while 里的每次都要取 len ,最后得到比较高的击败率了。
结果
①一开始的击败率:
②后来:
③最后: