两数之和

本恩比较简单的一个题目

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

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

逻辑比较简单就是每次遍历的一个元素先看散列表是不是已经有了这个需要的另一半元素 有就结束 没有酒吧当前这个元素加入散列表继续遍历

package main

//给定 nums = [2, 7, 11, 15], target = 9
//
//因为 nums[0] + nums[1] = 2 + 7 = 9
//所以返回 [0, 1]
func TwoSum(nums []int, target int) []int {

    var length = len(nums)
    //for i := 0; i < length; i++ {
    //  for j := i + 1; j < length; j++ {
    //      if nums[i]+nums[j] != target {
    //          continue
    //      }
    //
    //      return []int{i, j}
    //  }
    //}
    //
    //return nil

    maps := make(map[int]int)
    for k := 0; k < length; k++ {
        if index, ok := maps[target-nums[k]]; ok {
            return []int{index, k}
        }
        //没有找到我们就存储下来给后面的元素用来查找
        maps[nums[k]] = k
    }

    return nil
}

你可能感兴趣的:(两数之和)