代码随想录 | Day 6 | 2023.07.31

今日题目: 

242. 有效的字母异位词

349. 两个数组的交集

202. 快乐数

1. 两数之和

242. 有效的字母异位词

要点:

1. 使用哈希即可

2. 也能使用排序解决

这里比较巧妙的是使用特别的判定方式节约了空间。

代码:

func isAnagram(s string, t string) bool {
    if len(s) != len(t) {
        return false   
    }
    cnt := map[rune]int{}
    for _, ch := range s{
        cnt[ch]++
    }
    for _, ch := range t{
        cnt[ch]--
        if cnt[ch]<0 {
            return false
        }
    }
    return true
}

349. 两个数组的交集

要点:

1.看到集合大概率就是哈希

2. 学习下如何在Go中使用struct进行hash

这题主要就是学习在Golang中如何写哈希。对于只需要知道元素是否存在而无需关心其值是多少的情况时可以使用struct来节约内存空间。

代码:

func intersection(nums1 []int, nums2 []int) []int {
    set:=make(map[int]struct{},0)
    res:=make([]int,0)
    for _,v:=range nums1{
        if _,ok:=set[v];!ok{
            set[v]=struct{}{}
        }
    }
    for _,v:=range nums2{
        //如果存在于上一个数组中,则加入结果集,并清空该set值
        if _,ok:=set[v];ok{
            res=append(res,v)
            delete(set, v)
        }
    }
    return res
}

202. 快乐数

要点:

1. 看到出现循环或者需要判断元素是否出现过时可以使用hash来记录

2. 可以采用数学找规律

好题目。哈希题目的一大难点是知道可以用哈希。这题目想到了使用哈希就好说了。另外官解中for的写法可以学习一下。

代码:

func isHappy(n int) bool {
    m := map[int]bool {}
    for ; n != 1 && !m[n]; n, m[n] = step(n), true{}
    return n == 1
}

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

1. 两数之和

要点:

1. 学会使用哈希节省时间。

Leetcode第一题,还是挺有含金量的。第一眼都能想到n方的暴力解法,使用hash处理还是挺巧妙的。

代码:

func twoSum(nums []int, target int) []int {
    set := map[int]int{}
    for i, x := range nums {
        if p, ok := set[target-x]; ok {
            return []int{p, i}
        }
        set[x] = i
    }
    return nil
}

总的来说这次哈希的题目都不算难,主要是要有使用哈希的意识。当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值