两数之和

题目:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

解题思路:

哈希表法

通过以空间换取速度的方式,我们可以将查找时间从 O(n) 降低到 O(1)。哈希表正是为此目的而构建的,它支持以近似恒定的时间进行快速查找。

我们可以将每个元素的值和它的索引添加到哈希表中,然后在遍历时检查每个元素对应的目标元素(target - nums[i])是否存在于表中。

注意⚠️,该目标元素不能是 nums[i] 本身!

//go
func twoSum(nums []int, target int) []int {
    result := make([]int, 0)
    m := make(map[int]int)
    for i,k := range nums{
  // 判断map中是否存在key为[target - k]的值
  if value,exist := m[target - k];exist && value != i{
   // append:尾部追加元素
   result = append(result,value)
   result = append(result, i)
  }
  m[k] = i
 }
 return result
}

  地址:https://mp.weixin.qq.com/s/sTicB9IgCZxVhe53j7nsCA

 

posted @ 2020-07-27 09:39  small_lei_it  阅读(132)  评论(0编辑  收藏  举报