两数之和解题思路
题目描述
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
解题思路
这个问题可以通过哈希表来高效解决。具体步骤如下:
-
初始化哈希表:创建一个空的哈希表
numMap
用于存储数组中每个元素的值和它们对应的索引。 -
遍历数组:遍历数组
nums
中的每个元素,对于每个元素num
和它的索引i
:-
检查
target - num
是否在哈希表中:计算target - num
的值,并在哈希表numMap
中查找这个值。如果找到了,说明我们找到了一对符合条件的元素,它们的和等于target
。 -
返回结果:如果在哈希表中找到了
target - num
,则返回当前元素的索引i
和哈希表中存储的索引j
作为结果。 -
更新哈希表:如果没有找到,则将当前元素
num
及其索引i
存入哈希表numMap
中,以便后续查找。
-
-
返回空切片:如果遍历完数组后没有找到符合条件的两个数,则返回空切片
nil
。
代码实现
package main
func twoSum(nums []int, target int) []int {
// 创建一个哈希表用于存储每个元素及其索引
numMap := make(map[int]int)
for i, num := range nums {
// 检查 target - num 是否已经在哈希表中
if j, ok := numMap[target-num]; ok {
// 如果找到了,返回当前元素的索引和哈希表中存储的索引
return []int{j, i}
}
// 如果没有找到,将当前元素及其索引存入哈希表
numMap[num] = i
}
// 如果没有找到符合条件的两个数,返回空切片
return nil
}