美文网首页算法提高之LeetCode刷题
LeetCode 解题 : 1. 两数之和

LeetCode 解题 : 1. 两数之和

作者: 小码侠 | 来源:发表于2018-12-14 11:20 被阅读1次

给定一个整数数组 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]

长按二维码关注我们

相关文章

网友评论

    本文标题:LeetCode 解题 : 1. 两数之和

    本文链接:https://www.haomeiwen.com/subject/frwwhqtx.html