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

为何HashMap查找+遍历的两数之和解法时间复杂度为O(N)而非O(N²)?

两数之和HashMap解法的时间复杂度疑问

你实现的两数之和HashMap解法代码如下:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        #nums=[i for i in nums if i<target]
        hashm={}
        hashm[nums[0]]=0
        for i in range(1,len(nums)):
            if (target-nums[i]) in hashm.keys():
                return [hashm[target-nums[i]],i]
            hashm[nums[i]]=i

你疑惑的核心点在于对哈希表查找复杂度的误解:

  • Python中的dict(你代码里的hashm)是基于哈希表实现的,平均情况下,键的查找、插入操作时间复杂度都是O(1),而非O(N)
  • 只有在极端哈希冲突场景下(比如所有元素的哈希值完全相同,哈希表退化为链表结构),查找操作才会退化为O(N)的最坏时间复杂度,但这种情况在LeetCode测试用例和实际开发中几乎不会出现,算法复杂度分析通常以平均时间复杂度作为参考标准
  • 你的算法只遍历数组一次(时间复杂度O(N)),每次循环内的哈希表操作都是O(1)平均时间,因此整体平均时间复杂度为O(N),这也是LeetCode和复杂度检测工具给出结果的原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:42:06