如果您访问leetcode.com/problems/find-the-duplicate-number/solution/(问题287),则给出以下解决方案:
def findDuplicate(self,nums):
seen = set()
for num in nums:
if num in seen:
return num
seen.add(num)
此解决方案的时间复杂度表示为O(n)
我试图弄清楚为什么会这样。我考虑的方式是是否获得以下列表:
x = [1,2,3,4,5,6,7,8,9,10,11,.... 98,99,100,100] 即数字不断增加(或不相同),直到末尾重复的数字 数组
然后,当您遍历每个元素时,集合的大小将不断增加,以寻找重复的值。这会不会比O(N)时间长?
具体来说,如果您尝试在集合中查找98,则必须查看97(N-4)个值以查看它是否不在集合中,然后将其添加。对于99,您要查看98个值,等等。在最坏的情况下,这似乎是O(N ^ 2)解决方案?