题目

给定一个整数数组 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
}
最后修改:2021 年 09 月 27 日
如果觉得我的文章对你有用,请随意赞赏
百度推送成功 必应推送成功