You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode #217存在重复元素:我的Python代码问题出在哪?

问题:为什么用nums.count(x) ==1的与运算取反无法正确判断数组是否存在重复?

嘿,我来帮你拆解下这个问题~首先咱们先理清楚你的思路:你想通过判断所有元素的出现次数都是1(用all(nums.count(x) == 1 for x in nums)),然后取反得到“是否存在重复元素”的结果。这个逻辑本身是逻辑正确的,但它会出现“无法正常运行”的情况,主要有两个核心原因:

1. 时间复杂度爆炸,导致超时

nums.count(x)方法的底层是遍历整个数组来统计x的出现次数。如果你的数组长度是n,那么对每个元素都调用一次count,总时间复杂度就是O(n²)。当数组规模很大时(比如LeetCode测试用例里的十万级元素数组),这个方法会因为运行时间过长而超时,看起来就像“无法正常运行”。

举个例子:如果数组有10000个元素,你的代码需要执行10000次完整的数组遍历,总共做1亿次元素比较,这在时间限制内根本跑不完。

2. 不必要的重复计算

当数组里有重复元素时,你会多次统计同一个元素的出现次数。比如数组是[2,2,3],你会对第一个2调用count得到2,对第二个2又调用一次count还是得到2——这完全是重复劳动,进一步拖慢了运行速度。


更高效的正确解法

针对这个问题,有两种非常高效的常用解法:

解法1:利用集合的唯一性(最优解)

集合的特性是元素不重复,所以只需要比较原数组的长度和转换为集合后的长度:如果长度不同,说明存在重复元素。这个方法的时间复杂度是O(n),因为转换集合的过程只需要遍历一次数组。

def containsDuplicate(nums):
    return len(set(nums)) != len(nums)

解法2:排序后检查相邻元素

先对数组排序,然后遍历检查是否有相邻元素相等。排序的时间复杂度是O(n logn),后续遍历是O(n),整体效率也远高于你的原方法。

def containsDuplicate(nums):
    nums.sort()
    for i in range(len(nums)-1):
        if nums[i] == nums[i+1]:
            return True
    return False

内容的提问来源于stack exchange,提问作者Zhengyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:20:44