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

如何优化我的Python版Two Sum代码?解决LeetCode超时问题

针对你的Two Sum超时问题的优化建议

首先得说,你的暴力解法思路是完全正确的——遍历每个元素,再检查后面的元素能不能和它凑成target,这种方法在小数据量下完全没问题,也难怪前19个测试用例都过了。但最后那个超时的测试用例应该是个超大数组,O(n²)的时间复杂度扛不住,咱们来一步步优化你的思路:

先分析你当前代码的核心问题

你的代码用了两层嵌套循环,时间复杂度是O(n²)。当数组长度n很大的时候(比如104甚至更大),总操作次数会达到108级别,这肯定会触发超时限制。另外,你在内层循环找到结果后break,但外层循环还会继续执行(因为return是在所有循环结束后),这其实没必要——题目明确说每个输入恰好有一个解,找到后应该立刻返回,不用再做无用的遍历。

基于你的思路的具体优化方向

咱们不用完全推翻你的“找配对元素”的核心思路,只是把“找”的效率提上去:

  • 用哈希表(字典)替代内层循环的遍历查找
    你现在的内层循环是逐个检查后面的元素,这个过程可以用哈希表来加速。哈希表的查找时间是O(1),远快于遍历。具体来说:

    1. 遍历数组的时候,维护一个哈希表,键是已经遍历过的元素值,值是对应的下标。
    2. 对于当前元素nums[i],计算需要的配对值:complement = target - nums[i]。
    3. 检查这个complement是否在哈希表里:如果在,说明之前已经遍历过这个值,直接返回[哈希表里的下标, i];如果不在,就把当前元素和下标存进哈希表,继续遍历。
      这个方法的时间复杂度直接降到O(n),大数据量下完全不会超时。
  • 调整循环的终止逻辑
    你现在的代码里,找到结果后只break了内层循环,外层还会继续跑。记得找到符合条件的下标对后,立刻return结果,不要再继续循环了——反正题目说只有一个解,多跑都是浪费时间。

再回顾下Two Sum问题的核心要求(方便确认思路)

给定整数数组,返回两个数的下标,使它们的和等于目标值。假设每个输入恰好有一个解,且不能使用同一元素两次。
示例:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]

用哈希表的方法完全符合要求:因为我们只存已经遍历过的元素,所以找到的配对元素下标一定小于当前元素的下标,满足x < y,也不会重复使用同一个元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:39