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

我的twoSum代码获LeetCode通过,但时间复杂度似为O(n²),推理有误吗?

关于LeetCode两数之和题目与时间复杂度的疑问

作为算法与数据结构新手,我在LeetCode上做首个题目「两数之和」时,题目要求提出时间复杂度小于O(n²)的算法,但我编写了如下双重循环代码,却获得了平台通过:

def twoSum(nums: List[int], target: int)->List[int]:
    for x in range(len(nums)):
        for y in range(x+1, len(nums)):
            if nums[x] + nums[y] == target:
                return [x, y]
    return [0, 0]

nums = [1,2,3,4]
target = 7
twoSum(nums, target)

我分析这段代码的最坏情况时,迭代次数接近O(n²),请问是我的推理存在错误,还是LeetCode平台出现了问题?


解答

你的推理完全正确,这段代码的最坏时间复杂度确实是O(n²):当数组中不存在满足条件的数对,或者满足条件的数对位于数组末尾时,内层循环会遍历完剩余所有元素,总迭代次数为n*(n-1)/2,属于O(n²)的时间复杂度范畴。

平台判定代码通过的原因在于:

  • LeetCode的判题核心是代码能正确输出所有测试用例结果,且运行时间在限制范围内。对于小规模的测试用例,O(n²)的解法运行速度足够快,不会触发超时判定。
  • 题目要求「时间复杂度小于O(n²)的算法」,本质是引导学习者掌握更高效的解题思路,而非强制校验代码的复杂度。平台不会直接检测你的代码复杂度,只会通过实际运行时间来间接约束。

如果要满足题目要求的时间复杂度,可以使用哈希表优化,将时间复杂度降到O(n),示例代码如下:

def twoSum(nums: list[int], target: int) -> list[int]:
    num_map = {}
    for idx, num in enumerate(nums):
        complement = target - num
        if complement in num_map:
            return [num_map[complement], idx]
        num_map[num] = idx
    return [0, 0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:20:16