1. 两数之和
1. 两数之和
题目链接(简单)
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
数据范围:
2 <= nums.length <= 10^4-10^9 <= nums[i] <= 10^9-10^9 <= target <= 10^9- 只会存在一个有效答案
示例
示例 1:
输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释:因为 nums[0] + nums[1] == 9,返回 [0, 1]。
示例 2:
输入: nums = [3,2,4], target = 6
输出: [1,2]
示例 3:
输入: nums = [3,3], target = 6
输出: [0,1]
方法一:哈希表
思路及解法
对于每个元素 nums[i],我们需要查找是否存在另一个数 nums[j] 使得 nums[i] + nums[j] == target,即 target - nums[i]。
用哈希表一遍扫描:遍历时先查 target - num 是否已经在表中(在则直接得到答案),不在则记录 num → 下标。每个数只处理一次,时间复杂度 $O(n)$。
具体步骤:
- 使用哈希表存储已遍历过的元素及其下标;
- 遍历数组,对每个元素
num,检查target - num是否在哈希表中; - 如果存在,则返回对应下标和当前下标;
- 否则将当前元素及其下标存入哈希表。
若数组已有序,可改用对撞指针(两端向中间收缩,$O(1)$ 额外空间),模板见 04_滑动窗口 的「对撞指针」一节。
代码
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
d = dict()
for i, num in enumerate(nums):
if target - num in d:
return [d[target - num], i]
else:
d[num] = i
return []复杂度分析
- 时间复杂度:$O(n)$,遍历数组一次,哈希表查找为 $O(1)$。
- 空间复杂度:$O(n)$,哈希表最坏情况下存储全部元素。
1. 两数之和
https://mingsm17518.github.io/2026/10/05/刷题笔记/Hot100/哈希/1. 两数之和/