Golang HOT100 做题记录

发布时间 2023-10-07 23:25:37作者: test1024
 

LeetCode 热题100

  

1. 两数之和

题目大意:给出一个数字的数 []num,一个目标值 target。在数组中,找出两数之和为目标值的下标,任意输出一个答案。

例子:num[] = {0, 2,3, 4, 2}, target = 4, 输出:[]int{0,3}

注意点:1. 不能重复,如上不能为 []int{1,1} ,2.注意数组中重复数字处理

 

首次代码:

mp记录一下 value, target-value 对应的 index

repeat 记录首次出现的index,mp则是第二次出现的 index

(我怎么可以写的这么复杂?)

func twoSum(nums []int, target int) []int {
  mp := make(map[int]int, 0)
  repeat := make(map[int]int, 0)
  for k, v := range nums {
    if _, ok := mp[v]; ok {
      repeat[v] = mp[v]
    }
    mp[v] = k
  }

  for _, v := range nums {
    k1, ok1 := mp[v]
    k2, ok2 := mp[target-v]
    k3, ok3 := repeat[v]
    if ok1 && ok2 && (k1 != k2 || ok3) {
      if (ok3) {
        return  []int{k1,  k3}
      }
      return []int{k1, k2}
    }
  }
  return []int{}
}

 

标准代码:

func twoSum(nums []int, target int) []int {
  hashTable := make(map[int]int, 0)

  for k, v := range nums {
    // 加个简单的判断 当前v是否与之前出现过的匹配,如果匹配,返回,不匹配,记录到hashmap中
    if v2, ok := hashTable[target-v]; ok {
      return []int{k, v2}
    }
    hashTable[v] = k
  }
  return nil
}