查找列表是否包含重复项的最有效方法

时间:2017-09-17 09:17:28

标签: python python-3.x set

我有一个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的所有相关问题,但没有人讨论问题的效率方面。因此,我在这里问过。

1 个答案:

答案 0 :(得分:2)

  

你能否在时间或空间复杂度小于O(n)的情况下做到这一点?

总之,没有。

考虑所有元素都不同的情况。要确定是这种情况,您需要至少查看一次每个元素。这需要O(n)时间。

如果元素可以采用的值没有限制,则需要存储到目前为止所见的所有元素,以便根据您所看到的内容检查未来元素。如果所有元素都是不同的,则需要O(n)内存。