LeetCode中算法复杂度超限的报错与优化
引言
在刷 LeetCode 题目时,你是否经常遇到这样的提示:“Time Limit Exceeded”(TLE)?这通常意味着你的算法时间复杂度超出了题目允许的范围。尤其是在处理大规模输入数据时,即使逻辑正确,低效的算法也会导致超时失败。本文结合 CSDN 上多位算法高手的实战经验,系统梳理 LeetCode 中常见的复杂度超限问题、深层原因与高效优化技巧,并通过 大量代码对比、复杂度分析表和优化路径图,助你从“暴力解法”迈向“最优解法”。
一、常见复杂度超限报错类型
1. Time Limit Exceeded
—— 最常见的敌人
典型场景:
- 输入规模:
n = 10^5
- 你使用了
O(n²)
的双重循环 - 系统期望:
O(n)
或O(n log n)
示例问题: 两数之和
❌ 暴力解法(O(n²) —— 超时)
def twoSum(nums, target):
n = len(nums)
for i in range(n):
for j in range(i + 1, n):
if nums[i] + nums[j] == target:
return [i, j]
return []
输入规模 | O(n²) 运算次数 | 是否超时 |
---|---|---|
n = 100 | 10,000 | 否 |
n = 1,000 | 1,000,000 | 可能 |
n = 10,000 | 100,000,000 | ✅ 超时 |
n = 100,000 | 10,000,000,000 | ❌ 不可接受 |
✅ 哈希表优化(O(n) —— 通过)
def twoSum(nums, target):
hash_map = {
} # 值 -> 索引
for i, num in enumerate(nums):
complement = target - num
if complement in hash_map:
return [hash_map[complement], i]
hash_map[num] = i
return []