Go语言的LeetCode刷题之旅-001-两数之和
题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解题思路
a + b = target
也可以看成是
a = target - b
在map[整数]整数的序号中,可以查询到a的序号。这样就不用嵌套两个for循环了。
GO代码:
package main
func twoSum(nums []int, target int) []int {
// m 负责保存map[整数]整数的序列号
m := make(map[int]int, len(nums))
// 通过 for 循环,获取b的序列号
for i, b := range nums {
// 通过查询map,获取a = target - b的序列号
if j, ok := m[target-b]; ok {
// ok 为 true
// 说明在i之前,存在nums[j] == a
return []int{j, i}
// 注意,顺序是j,i,因为j<i
}
// 把i和i的值,存入map
m[b] = i
}
return nil
}