【发布时间】:2021-03-30 13:15:23
【问题描述】:
从 Leetcode 上的一个热门问题中考虑这个 python 解决方案:
def findOptimalRadius(houses, heaters):
houses.sort()
heaters.sort()
last = len(heaters) - 1
x1,x2 = 0,0
res = 0
for house in houses:
while x2 < last and house > heaters[x2]:
x1, x2 = x2, x2+1
dist1,dist2 = abs(heaters[x1] - house), abs(heaters[x2] - house)
res = max(res, min(dist1,dist2))
return res
(给定 N 个房屋和 M 个加热器)
显然,如果我们在开始时对两个数组进行排序,则空间复杂度被认为是 O(N log N + M log M),如果它们已经排序,则空间复杂度被认为是 O(N+M)。
但我不明白为什么 for 循环和嵌套的 while 循环只占 O(N+M)。
不应该是 O(N*M),因为它们是嵌套的,而且在最坏的情况下,while 循环会遍历所有加热器?
感谢您帮助我了解在这种情况下如何计算时间复杂度
【问题讨论】:
-
你能解释一下这个问题,这也是一个解决方案吗?
-
我不确定是否可以在此处添加链接,但您可以在谷歌上输入“leetcode 加热器问题”轻松找到问题描述
标签: python while-loop time-complexity big-o