代码随想录算法训练营|day6

第三章 哈希表

  • 242.有效的字母异位词
  • 349.两个数组的交集
  • 202.快乐数
  • 1.两数之和
  • 总结

242.有效的字母异位词

文章详解

func isAnagram(s string, t string) bool {
    if len(s) != len(t) {
        return false
    }
    isExist := make(map[rune]int)
    for _, i := range s {
        isExist[i] += 1
    }
    for _, i := range t {
         isExist[i]--
         if isExist[i] == -1 {
             return false
         }
    }
    return true
}   

349.两个数组的交集

文章详解

func intersection(nums1 []int, nums2 []int) []int {
    res := []int{}
    isExist := make(map[int]bool)
    for _, val := range nums1 {
        isExist[val] = true
    }
    for _, val := range nums2 {
        if isExist[val] {
            isExist[val] = false
            res = append(res, val)
        }
    }
    return res
}

官方题解中set1 := map[int]struct{}{},用struct{}作为占位符原因:空结构体实例不占任何内存空间,节省资源;且其本身具备很强的语义,即仅作为占位符。

202.快乐数

题目详解

func isHappy(n int) bool {
    isExist := map[int]bool{}
    for n != 1 && !isExist[n] {
        isExist[n] = true
        n = squreSum(n)
    }
    return n == 1
}

func squreSum(n int) int{
    sum := 0
    for n > 0 {
        a := n % 10
        sum += a * a
        n /= 10
    }
    return sum
}

(2) 快慢指针:判断链表是否有环
官方题解

1.两数之和

题目详解

func twoSum(nums []int, target int) []int {
    isExist := map[int]int{}
    for i, num := range nums {
        if j, ok := isExist[target - num]; ok {
            return []int{i, j}
        }
        isExist[num] = i
    }
    return []int{}
}

总结

快乐数解题主要考虑判断是否有环,迁移到快慢指针思路,cool

你可能感兴趣的:(代码随想录练习,算法,go)