LeetCode Two Sum问题:测试用例通过但提交超时,是否为代码问题?
Two Sum提交超时问题分析
你的代码确实存在效率问题,这就是提交时出现超时错误的核心原因。
问题根源
你当前实现的是暴力双重嵌套循环,时间复杂度为O(n²)。LeetCode的提交测试包含大规模输入用例(比如长度超过10^4的数组),这种情况下O(n²)的算法会产生百万甚至千万级的计算量,远超题目允许的时间限制。而你本地测试通过的用例大概率是小规模数据,所以没触发超时。
另外你的循环逻辑还有冗余:
- 会重复检查两两组合(比如b1=0时查a1=1,b1=1时又查a1=0)
- 当b1==a1时才递增a1的逻辑,会额外增加不必要的循环步骤
优化方案:哈希表法(O(n)时间复杂度)
用哈希表(Python里的字典)存储已遍历元素的索引,遍历过程中直接查询当前元素的补数(target - 当前元素)是否存在于哈希表中,存在则直接返回结果。这种方法只需要遍历数组一次,效率大幅提升。
优化后的代码:
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: num_index_map = {} for idx, num in enumerate(nums): complement = target - num if complement in num_index_map: return [num_index_map[complement], idx] num_index_map[num] = idx
为什么其他开发者没遇到超时
其他开发者普遍采用了O(n)或O(n log n)的高效解法,而非暴力遍历。比如上述哈希表法,或者先排序再用双指针(但排序会打乱原索引,需要额外处理),这些方法在大规模数据下的执行速度远快于O(n²)的暴力解法,因此不会触发超时。
内容的提问来源于stack exchange,提问作者Xhenex
相关产品推荐
相关产品推荐

