哈希我觉得难点在于:如何想到利用某个元素是否出现过,来用哈希解决。
先对每一道题进行盘点,一共八道。
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