Golang HOT100 做题记录

 

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
}

 

2. 字母异位词分组

题目大意:多个字符串,如果两个字符串,只有字母顺序不一样,则可以将该字符串化为一组。输出相同组的字符串们。

解题思路:排序+hash

遇到问题主要为 go 不太会写排序,需要处理一下

首次代码

func groupAnagrams(strs []string) [][]string {
  mp := make(map[string][]string, 0)
  for _, v := range strs {
    sorted := sortString(v)
    mp[sorted] = append(mp[sorted], v)
  }
  var ans [][]string
  for _, v := range mp {
    ans = append(ans, v)
  }
  return ans
}

func sortString(str string) string {
  s := []byte(str)
  sort.Slice(s, func(i, j int) bool {return s[i]<s[j]})
  return string(s)
}

 

posted @ 2023-10-07 23:17  test1024  阅读(29)  评论(0)    收藏  举报