1. 两数之和 Two Sum
题目简述
给定一个整数数组 nums 和一个整数目标值 target,
请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
我的思路
一开始我想到的是暴力解法:两层循环,把每一对数字都加起来检查一遍,
时间复杂度是 O(n²)。后来我想到可以用哈希表:遍历数组时,把每个数字存进表里,
同时检查 target - nums[i] 是否已经出现过。这样只需要一次遍历,
时间复杂度降到 O(n)。
我的解法
class Solution:
def twoSum(self, nums: list[int], target: int) -> list[int]:
seen = {} # 记录每个数对应的下标
for i, num in enumerate(nums):
diff = target - num # 需要的另一个数
if diff in seen: # 之前已经出现过
return [seen[diff], i]
seen[num] = i # 先存起来,供后面的数查找
return []
function twoSum(nums, target) {
const seen = {}; // key: 数字, value: 下标
for (let i = 0; i < nums.length; i++) {
const diff = target - nums[i]; // 需要的另一个数
if (diff in seen) {
return [seen[diff], i];
}
seen[nums[i]] = i; // 先存起来,供后面的数查找
}
return [];
}
复杂度分析
- 时间复杂度:O(n) —— 只需遍历一次数组
- 空间复杂度:O(n) —— 哈希表最多存 n 个数