从两数之和到哈希表优化:探索高效算法实现
<|begin▁of▁sentence|># 1. 两数之和
## 题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
## 示例
示例 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]
## 提示
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
## 进阶
你可以想出一个时间复杂度小于 O(n2) 的算法吗?
## 解题思路
最直接的方法是使用双重循环遍历数组中的每一对数字,检查它们的和是否等于目标值。这种方法的时间复杂度是O(n^2),其中n是数组的长度。
为了优化,我们可以使用哈希表(在Python中是字典)来存储每个数字的索引。这样,我们可以通过一次遍历数组,对于每个元素,检查目标值减去当前元素的差值是否已经在哈希表中。如果在,我们就找到了两个数字,它们的和等于目标值。这种方法的时间复杂度是O(n),因为我们只需要遍历数组一次,而哈希表的查找操作是O(1)的。
具体步骤:
1. 初始化一个空的字典来存储数字和它们的索引。
2. 遍历数组,对于每个数字,计算目标值减去当前数字的差值。
3. 检查这个差值是否已经在字典中。如果是,返回差值的索引和当前索引。
4. 如果不是,将当前数字和它的索引添加到字典中。
这种方法确保了我们不会使用同一个元素两次,因为我们在检查差值时,当前元素还没有被添加到字典中。
## 代码
```python
def twoSum(nums, target):
num_map = {}
for i, num in enumerate(nums):
complement = target - num
if complement in num_map:
return [num_map[complement], i]
num_map[num] = i
return []
```
## 相关主题
- 数组
- 哈希表
## 相似题目
- 三数之和 (中等)
- 四数之和 (中等)
- 两数之和 II - 输入有序数组 (中等)
- 两数之和 III - 数据结构设计 (简单)
- 两数之和 IV - 输入 BST (简单)
- 小于 K 的两数之和 (简单)
最新文章
- 冷却液保养与方向盘握法:行车安全的两大关键细节
- 智能驾驶技术发展:从激光雷达到自动驾驶系统的革新
- 智能座舱与车路协同:未来出行的三大技术革新
- 电动化浪潮:固态电池与高压平台引领车联网新未来
- 智能温控风扇系统优化汽车能量管理
- 夜间行车安全:大灯、近光灯与远光灯使用全指南
- 未来汽车三大科技革命:自动驾驶、固态电池与智能座舱
- 结垢发动机动力性能提升燃油喷射涡轮增压轻质合金可变气门正时可变压缩比燃烧效率功率输出散热系统优化
- 汽车三元催化器:工作原理、保养要点与故障识别
- 宝马全新电动SUV续航里程突破600公里
- 汽车翼子板:设计要点、修复技巧与日常维护指南
- V2X与固态电池驱动未来:MaaS引领智能出行革命
- 电动化与智能化驱动:汽车产业三大技术变革趋势
- 电动化浪潮:固态电池与高压平台引领汽车产业变革
- 激光雷达与毫米波雷达驱动自动驾驶技术革新与商业化落地
- 汽车点火系统工作原理解析
- 燃油系统与汽车动力关系
- 自动驾驶与电池技术革新引领智能汽车新时代
- 掌握发动机转速与空气滤清器保养,OBD行车电脑助你省油20%
- 变速箱油革新与电池技术突破:智能养护新时代
