leetcode哈希表系列汇总

这个系列,主要就是利用go中的map来解

242 有效的字母异位词

题目:两个字符串,判断是否为异位词
解析:这道题肯定用map,只是里面的细节很多,比如要先判断两个字符串是否长度相等,不相等就直接返回了;然后对两个字符串分别用两个循环来处理,第二个减法的循环中,需要判断map中的值是否减到了1一下

349 两个数组的交集

题目:给两个数组,返回一个数组,里面是交集(没有重复元素)
解析:分别遍历,存进两个map里,然后用短的那个map再遍历,再第二个map中就追加到结果数组中即可

202 快乐数

题目:每一位的平方的加和,得出新的数,最后和为1就是快乐数,true or false
解析:本题没写太明白,要不就是为1,要不就是同一个数出现了两次,代表循环了;那么就可以用一个map[int]bool来判断是否出现过,注意要先写map,再重新计算数值,然后就废了

1 两数之和

题目:给一个数组,给一个目标值,返回一个数组,里面是符合的两个的下标
解析:还是用map,但因为要返回的是下标,就可以把下标存在value里,key里存数值

454 四数相加II

题目:四个数组,要求和为0,求有多少组
解析:两两个分成一组,每一组两层循环,key就是两个的和,value是出现的次数;一个加一个减

383 赎金信

题目:两个字符串a和b,判断a能不能由b里面的字符组成,一个字符只能用一次(01背包?)
解析:用map,把b的存进map,然后遍历a的时候,直接–,若小于0,那就是不能组成

15 三数之和

题目:一个数组,求三数之和为0,返回二维数组,且要子数组不重复
解析:这个压根不用哈希,用双指针+滑动窗口,写了好几次没写对,有如下点:
1.先判断边界条件,若数值小于3直接return空数组;
2.然后对数组进行排序,排序后遍历数组,对里面的数据再进行处理;
3.如果第一个数大于0,则再加上后面的两个(排序了),必然不会等于0,直接在循环里break;
4.如果当前数字等于上一个数字,也跳过(a重复),第一个数除外
5.若上面的都满足,那么滑动窗口为下一个位置到最后一个位置,再里面一个循环进行处理,三者之和大于0的话,right–;小于的话left++;等于的话,那就是先找到了一组合适的结果,然后再分别对b和c去重,最后对双指针两边同时收缩

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值