1.哈希表理论基础:
遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法
什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法
242.有效的字母异位词
1.自己思路
遍历字符串 查询到一个字母就放入对应的map中 map的key根据26个英文字母来判断
但是如何比较 两个map是否相同就很麻烦
2.题解思路:只使用一个数组来记录 A字符串++ B字符串-- ps:注意string的一些基础函数使用.size() string[i-'a'](asciaII码转换)
349. 两个数组的交集
1.自己思路:
unordered_map 下标是对应的数字 key为数字 value为次数 一个++ 一个-- 通过率 0 QAQ
2.题解思路:
注意返回:返回不重复 不讲究顺序 重点在于返回不重复
因为需要自动去重 所以选择unordered_set这种数据结构(底层实现哈希表 数值不重复)
然后第一个数组来存入unordered_set 第二个数组来遍历find
int num : num2 num2为vector 遍历操作类似auto
202. 快乐数
1.自己思路:
首先得知道怎么计算每次数的各个位置平方之和(核心点:while(n) n/10)
其次可以理解成递归思想 每次得出的值存放在unordered_set中 发现是否有重复有则不是欢乐树
pass
2.题解思路类似
1. 两数之和
1.自己思路:
因为题目说可以假设只有一组答案 所以两层for循环遍历 会出现 i j j i 这种重复情况 所以存放ret的数据类型为数据值不可重复的unordered_set
同时注意排除 ii jj这种情况 通过
2.题解思路:
这里可以只使用一层for循环 因为是两值相加 所以每次去ret中是否有当前target-当前值的值 有的花即可输出 没有 则记录该值 因为需要输出下标 所以需要不仅知道数值 还得知道数值的下标 所以选择使用map key存数值 value存下标
注意 思路转换成代码时
1.auto遍历器的使用 map.find的返回值是auto类型 auto->first指向key auto->second指向value
2.pair<int,int>(i,j) 把i j绑定成key value 然后才可以map.insert