2 条题解
-
0
题目名称:两数之和(LeetCode 1)
题目描述
给定一个整数数组
nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例
输入:
nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为nums[0] + nums[1] == 9,所以返回[0, 1]。解法思路
使用哈希表优化暴力枚举,时间复杂度可降至 O(n)。
遍历数组时,对于每个元素nums[i],计算target - nums[i](称为“补数”),检查补数是否已存在于哈希表中:- 若存在,直接返回补数的索引和当前索引
i; - 若不存在,将当前元素
nums[i]和索引i存入哈希表,继续遍历。
代码实现
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 [] # 题目保证有解,此句可省略复杂度分析
- 时间复杂度:O(n),其中 n 是数组长度,每个元素仅遍历一次。
- 空间复杂度:O(n),哈希表最多存储 n 个元素。
- 若存在,直接返回补数的索引和当前索引
- 1
信息
- ID
- 606
- 时间
- 1000ms
- 内存
- 30MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 2
- 上传者