LeetCode1-

48 阅读1分钟

1. 两数之和 two-sum

题目:

  给定一个整数数组 nums 和一个整数目标值 target,
  请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
  你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
  你可以按任意顺序返回答案。

示例 1:

输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

解法:

解此题共有两种方法:

  • (1)暴力算法
  • (2)查找表法

而查找表法又分为:

  • 1.1 哈希表 --- 不需要维护顺序
  • 1.2 平衡二叉树搜索 --- 需要维护顺序

这里不需要维护返回的顺序,所以最优的方法是哈希表法

哈希表法: 在一次遍历时记录信息,省去时间,以空间换时间。在一次循环中执行多步信息

答案:

本题中是将通过验证Target-value是否存在于map中,以得到是否两数相合等于Target 在Map中,Key中存放的是num中未匹配成功的值,而Value中存的是值在num中的下标i

func twoSum(nums []int, target int) []int {
    //新建map
    hashmap :=make(map[int]int)
    //开始循环
    for i,value := range nums{
        targetNum:=target - value
        //检验hashmap中是否有target,若ok为true,则找到结果,返回targetIndex与i
        targetIndex,ok := hashmap[targetNum]
        if ok {
            return []int{targetIndex,i}
        }else{  //否则将num-value存到map-Key中,而下标num-i存到map-value中
            hashmap[value] = i 
        }
    }
    return []int{}
}