链接
题目
代码
解法一(暴力优化版)
python
# 输入
nums=list(map(int,input().split()))
target=eval(input())
for i in nums:
rem=target-i
if rem in nums:
print([nums.index(i),nums.index(rem)])
break
特点:
- 时间复杂度:O(n²)
if rem in nums
是 O(n) 的列表查找,嵌套在循环中,整体 O(n²)。
- 空间复杂度:O(1)
- 不需要额外空间。
- 潜在问题
- 重复值错误 :如
nums = [3, 3], target = 6
,nums.index(rem)
总是返回第一个 3 的索引,导致输出[0, 0]
(错误)。 - 低效:对每个元素都遍历整个数组,数据量大时速度慢。
- 重复值错误 :如
修-避免使用同样元素
python
# 输入
nums=list(map(int,input().split()))
target=eval(input())
for i in range(len(nums)):
rem=target-nums[i]
if rem in nums[i+1:]: #
print([i,nums.index(rem,i+1)]) # 从i+1开始找
break
解法二(哈希表优化版)
python
# 输入
nums=list(map(int,input().split()))
target=eval(input())
dic={}
for k,v in enumerate(nums): # k为索引,v为值
rem=target-v
if rem in dic:
print([k,dic[rem]])
# 打印索引,'k'为原数组中的,'dic[rem]'为经字典存储的原数组中的
break
dic[v]=k
特点:
- 时间复杂度:O(n)
- 只需遍历一次数组,利用字典(哈希表)实现 O(1) 的查找。
- 空间复杂度:O(n)
- 需要额外存储字典,最坏情况下存所有元素。
- 正确性高
- 能正确处理重复值(如
nums = [3, 3], target = 6
,输出[1, 0]
)。
- 能正确处理重复值(如
- 高效查找
- 用
dic
存储已遍历的值,避免重复计算。
- 用