我有一个list
大小的整数作为输入。
我想写一个函数来检查列表中的项是否都是不同的。
方法1 :对列表进行迭代,并使用set
跟踪到目前为止遇到的所有项目。一旦遇到重复,就立即返回True
。
def containsDuplicates1(a):
seen = set()
for i in a:
if i in seen:
return True
seen.add(i)
return False
时间复杂度:O(n)
空间复杂度:O(n)
方法2:将整个列表转换为set
并比较它们的长度。
def containsDuplicates2(a):
return len(a) != len(set(a))
时间复杂度:O(n)(用于set(a)
操作)
空间复杂度:O(n)
当给定列表可能包含重复项时,第一种方法比第二种方法表现更好。
这是我们能做的最好的吗?或者在时间或空间上有更有效的方法来解决这个问题吗?
P.S:我已经阅读了有关Stack Overflow的所有相关问题,但没有人讨论问题的效率方面。因此,我在这里问过。答案 0 :(得分:2)
你能否在时间或空间复杂度小于O(n)的情况下做到这一点?
总之,没有。
考虑所有元素都不同的情况。要确定是这种情况,您需要至少查看一次每个元素。这需要O(n)时间。
如果元素可以采用的值没有限制,则需要存储到目前为止所见的所有元素,以便根据您所看到的内容检查未来元素。如果所有元素都是不同的,则需要O(n)内存。