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

两种Python重复元素检测方案时间复杂度均为O(N),为何实际耗时差异大?

为什么两个O(N)时间复杂度的重复元素检测代码实际耗时差异显著?

解决方案1:

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        return len(nums) != len(set(nums))

解决方案2:

class Solution(object):
    def containsDuplicate(self, nums):
        hset = set()
        for idx in nums:
            if idx in hset:
                return True
            else:
                hset.add(idx)

出现耗时差异的核心原因如下:

  • 提前终止的巨大优势
    方案2的逻辑是遇到第一个重复元素就立刻返回结果,不需要处理数组剩余的元素。比如如果数组前几个元素就存在重复,方案2只需要循环几次就能结束,而方案1必须把整个数组完整遍历一遍,将所有元素插入集合后再比较长度,这种场景下两者的操作量天差地别,耗时自然拉开差距。

  • 时间复杂度的局限性
    O(N)是渐近时间复杂度,它只描述数据量趋近于无穷大时的时间增长趋势,不代表实际运行的绝对耗时。两个同复杂度的算法,在常数项、实际操作量上可能有很大区别——方案1的操作量固定为N(不管有没有重复都要处理所有元素),而方案2的操作量在最坏情况(无重复)下是N,最好情况是2(前两个元素重复),平均操作量远小于方案1。

  • 底层实现的细节差异
    虽然Python的set()构造是C语言实现的,单步操作比Python层面的for循环更快,但这个优势只有在处理全部元素时才能体现。一旦方案2可以提前终止,哪怕单步循环慢,总操作量的减少会完全抵消这个劣势,甚至反超。而如果是完全没有重复的测试用例,方案1反而可能更快,但这种场景下两者的耗时差异不会像有重复时那么显著。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:01:09