Day1-两数之和
📌 题目描述
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
💡 解题思路
- 使用哈希表(字典)存储已访问的数字及其下标;
- 遍历数组,对于每个元素
x
,检查target - x
是否存在于哈希表中; - 如果存在,说明找到了答案;
- 否则将当前数字和下标加入哈希表继续查找。
时间复杂度:O(n)
空间复杂度:O(n)
✅ JavaScript 实现
1 | var twoSum = function(nums, target) { |
🟣 Swift 实现
1 | class Solution { |
🧠 思考与拓展
如果要求返回所有满足条件的数对呢?
可以在遍历时记录所有匹配的组合,存储在数组中。
如果输入数据有多个解,你该如何处理?
- 当前题目假设「只有一个解」,但在实际项目中通常需要找到所有解。
- 可采用双层循环或在 map 中记录所有下标(数组),进行组合尝试。
如果不能使用额外空间,只能 O(1) 空间?
- 先对数组进行排序(需要额外记录原始下标),然后使用 双指针 思路解决;
- 时间复杂度为 O(nlogn),但空间复杂度可降为 O(1)(如果允许修改原数组)。
高频拓展题