LeetCode:两数之和

290 阅读1分钟

题目:

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

图片

LeetCode题目源地址:leetcode-cn.com/problems/tw…

首先想到的暴力遍历法:

两层循环,依次拿出一个元素跟后面的元素求和,看与目标值是否相等

func twoSum(nums []int, target int) []int {
 for k1, v1 := range nums {
  for k2 := k1 + 1; k2 < len(nums); k2++ {
   if v1 + nums[k2] == target {
        return []int{k1, k2}
   }
  }
 }
 return []int{}
}

进阶方法

我们使用哈希法,将给定的切片 nums 的索引和值,翻转存入到 map 中:

  1. 判断 目标值 target - nums 中一个元素 是否存在 map 中;
  2. 如果存在则找到需要的值并返回;
  3. 若不存在 map 中,则将遍历中的索引及元素值翻转存入到 map 中。
func twoSum(nums []int, target int) []int {
 m := make(map[int]int)
 for k, v := range nums {
  if index, ok := m[target-v]; ok {
   return []int{index, k}
  } else {
   m[v] = k
  }
 }
 return []int{}
}