给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解
func twoSum(nums []int, target int) []int {
//申明map,用于存储已经处理过的数据
tmp := map[int]int{} // 以数据作为key,下标作为值
l := len(nums)
for i := 0; i < l; i++ {
//判断map中是否存在数据,如果存在则返回。
//这里有个逻辑问题,map中存在的是已经处理过的数据。按照题意,数据存在的数据和当前数据相加,则为target
//那么已经存在的数据 = target - 当前数据(nums[i])
if index, ok := tmp[target - nums[i]]; ok {
return []int{index, i}
}
tmp[nums[i]] = i //存入map
}
return nil
}
运行过程
原始数据: [2 4 6 7 11 15]
-------------------------------------------
开始第 0 次查找
当前数据: 2
当前需要找到: 7
数据没有找到,存入map[2:0]
-------------------------------------------
开始第 1 次查找
当前数据: 4
当前需要找到: 5
数据没有找到,存入map[2:0 4:1]
-------------------------------------------
开始第 2 次查找
当前数据: 6
当前需要找到: 3
数据没有找到,存入map[2:0 4:1 6:2]
-------------------------------------------
开始第 3 次查找
当前数据: 7
当前需要找到: 2
数据找到了。
-------------------------------------------
[0 3]
长按二维码关注我们
网友评论