def firstMissingPositive(self, A):
least = 1024*1024*1024
# worst case n ops
for i in A:
if i < least and i > 0:
least = i
if least > 1:
return 1
else:
# should be O(n)
A_set = set(A)
# worst case n ops again
while True:
least += 1
if least not in A_set:
return least
我只是问,因为对于给定的问题来说这似乎太简单了,这里的大多数人可能已经在Leetcode或类似的地方看到过。在Python的set或dict实现中有没有我不知道的东西?查找应该是O(1)并且将列表转换为集合应该是我理解的O(n)。
答案 0 :(得分:2)
它不是O(1)
空格,而是O(n)
空格,因为您需要构建集合。
至于时间,根据the Python wiki,设置包含需要O(n)
最坏的情况。因此,您的算法是O(n^2)
。请注意,这是最糟糕的情况 - 集合限制的平均时间为O(1)
,因此算法的平均时间复杂度确实为O(n)
。
您可以使用有序集将最差情况降至O(n log n)
,但平均时间也将为O(n log n)
。