给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的列表索引
时间: 2023-10-20 16:18:21 浏览: 95
好的,这个问题可以用哈希表(字典)来解决,算法的时间复杂度为 O(n),具体的实现如下:
```python
def twoSum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hash_map = {}
for i, num in enumerate(nums):
if target - num in hash_map:
return [hash_map[target - num], i]
hash_map[num] = i
return []
```
解释一下这个算法的思路:
- 首先我们定义一个哈希表(字典) hash_map,用来存储每个数字和它的下标(索引)。
- 然后我们遍历一遍数组 nums,在遍历的过程中,我们判断当前数字 num 和 target - num 是否都在哈希表中,如果是的话,说明这两个数字的和等于 target,我们就可以直接返回它们的下标。
- 如果不是的话,我们就把当前数字 num 存入哈希表中,等到遍历到 target - num 的时候,就可以找到它的下标了。
- 如果遍历完了整个数组都没有找到合适的数字,说明不存在这样的两个数字,我们就返回一个空列表。
举个例子,假设我们要在数组 [2, 7, 11, 15] 中找到两个数字的和等于 9,那么我们可以这样做:
- 第一步,定义一个空的哈希表 hash_map。
- 第二步,遍历数组 [2, 7, 11, 15],取出第一个数字 2,发现 9 - 2 = 7 不在哈希表中,于是把数字 2 存入哈希表中,对应的索引是 0。
- 第三步,取出第二个数字 7,发现 9 - 7 = 2 已经在哈希表中了,对应的索引是 0,于是直接返回 [0, 1]。
- 时间复杂度为 O(n),空间复杂度为 O(n)。
阅读全文