两数之和解题思路
题目描述
给定一个整数数组 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
}