总结 哈希

哈希我觉得难点在于:如何想到利用某个元素是否出现过,来用哈希解决。

先对每一道题进行盘点,一共八道。

1. 有效字母异位。

为什么想到哈希?

给出两个字符串。判断其中的字母是否是一一映射。也就是某字母是否出现过。就自然想到哈希了

为什么用数组?

因为题中只有小写字母,并且可以用字母来和下标做映射。 nums[s[i] - 'a']

2.两个数组的交集

为什么想到哈希?

和上一题类似。判断一个数是否在另一个元素出现过。出现就插入。

为什么用set?

数据比较分散,用数组的话,需要用下标来做映射。需要开辟较大的空间。

3.快乐数

这个题目的关键是想清楚什么时候代表循环的开始:当和重复出现

到这,我们就知道了。就相当于判断一个数是否出现过,使用哈希!!

为什么用set?

同样是和较为分散。

4.两数之和 力扣的第一题

要求返回的是下标

为什么使用哈希?

可以把该题看作是,我已知一个数,已知和,求另一个数是多少

那也是求一个数是否出现过。用哈希!

为什么使用map?

因为我们不但要知道这个数,同时要知道这个数的下标。这里有key 和 value 的对应。

如果找到了就返回(因为每个输出只有一种答案),没找到就将该数插入map

5.四数相加||

为什么用哈希?

可以两个两个处理数组。

两个数组之和,和两数之和的想法类似。已知和,判断另一个数是否出现过

为什么用map?

要存和,同时要存和出现的次数,出现几次代表有几组  count += value

6.赎金信

和有效字母异位类似。求一个字符串是否是另一个字符串的组成部分

7.三数之和

用双指针。

先排序balbalbal,一个for。注意去重

8.四数之和

 和上一题类似,先排序,用两个for。去重和上一题是类似的。

注意剪枝 要加上 是否 > 0 ,不能return,直接break

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值