暴力
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
ans = 0
cg = Counter(sorted(g))
cs = Counter(sorted(s))
# 匹配剩下的元素
for gk in cg.keys():
for ck in cs.keys():
if ck >= gk and cs[ck] != 0:
t = min(cs[ck],cg[gk])
cg[gk] -= t
cs[ck] -= t
ans += t
if cg[gk] == 0:
break
return ans
每个g[i]的元素消除掉s中大于等于g[i]的元素,并且是从小到大消除,所以构造dict之前要先排序
如果不是按顺序消除,那么
g =[1,2,3] s=[3,1,1]
g[0] = 1消除了3,然后剩下的s无法满足任何一个元素,答案为1
但实际上正确答案是2,1和3互相消除一个元素
时间复杂度
O
(
m
∗
n
)
O(m*n)
O(m∗n)
空间复杂度
O
(
m
+
n
)
O(m+n)
O(m+n),构造了字典
优化后的暴力
还是要sorted
如果直接在两个数组中模拟的话,时间复杂度还是会到
O
(
m
∗
n
)
O(m*n)
O(m∗n)
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
g = sorted(g)
s = sorted(s)
count = 0
for i in s:
if i >= g[count]:
count += 1
if count == len(g):
break
return count
一趟循环
时间复杂度
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
官方题解写得不如上面的简洁