题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
这道题采用hash表解法,在Go中也就是map。
hashMap:=map[int]int{}
这样来声明一个hash表
解题思路:
从这张图中就很容易看出原理了。
当总数减去当前循环的一个数时,map中有相同的数,就说明这两个数符合答案,就会返回,如果不符合,就会将当前循环数组的值和下标存进map中,再给下一次循环使用判断。
使用hash表可以极为快速的查找是否有相同值,如:
value,ok:=mapName[values]
这句话可以返回一个名字为mapName中有相同值(key)的下标,有就返回,没有就是false。
解题代码
func twosumInit(nums []int, target int) []int {
// 创建一个hashmap表 用于储存过滤过的数据
hashMap:=map[int]int{}
// 利用循环来判断哈希表中是否存在满足条件的值 index下标 value值
for index,value:=range nums{
// 这个判断是读取当target-value剩下的数有相同的,就说明当前value下标与储存在map中的当前下标是这道题的答案
if i,ok:=hashMap[target-value];ok{
return []int{i,index}
}
// 当条件不满足时就把值存入hash表,这样下一次循环就可以利用hash表的特性方便的查找是否有符合条件的值
hashMap[value]=index
}
// 当条件都不满足时返回空
return nil
}