1.哈希表理论基础:代码随想录 (programmercarl.com)
1.注意一般哈希表都是用来快速判断一个元素是否出现在集合里。
2.一般来讲,若哈希值较少,用数组即可,若哈希值较大,则用set或者map。set数据结构和数组类似,但是里面的值不能重复。
2.有效字母异位词:代码随想录 (programmercarl.com)
1.此题主要是学习哈希法的思想,利用数组完成哈希法。
2.当用字母‘a’或‘b’等进行加减运算的时候,系统会默认为用字母的ascaII码来进行运算。
3.两个数组的交集:代码随想录 (programmercarl.com)
1.但是要注意,使用数组来做哈希的题目,是因为题目都限制了数值的大小。 而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。而且如果哈希值比较少,特别分散、跨度非常大,使用数组就造成空间的极大浪费。
2.set::find是C++ STL中的内置函数,该函数将迭代器返回到在集合容器中搜索的元素。如果找不到该元素,则迭代器将指向集合中最后一个元素之后的位置。
3.用unordered_set先存放结果为了避免数值重复,之后再将其转为vector<int> 作为输出。
4.直接用set计算的时间会很大,所以当能用数组的时候就用数组,不能用数组再用set,不要一上来就用set。
4.快乐数
1.学会取数值各个位上的单数之和的操作。
2.注意题目中已经说了的条件:要么无限循环,要么等于1,这符合哈希法,在一群数字中找出某数(找出重复出现的数)
3.学习无限循环的操作:while(1){},直到找到最后的结果。
4.一定记得最后无限循环中最后使n=sum的操作。
5.在定义getsum的函数时,要记得把int sum定义在while循环外。
刷题过程中出现的错误:5.
5.两数之和:有人相爱,有人夜里看海,有人力扣第一题都做不出来
1.为什么要用哈希法?哈希法的用处就在于快速找到集合中是否有某一个值,而本题的思路就在于在遍历过的元素中找到是否有target-nums【i】的元素,符合这个规律。
2.为什么是用map呢?因为我们既要存放数组中的元素的值,又要存放其索引,只有map符合。
3.key和value分别储存啥:因为map的的find()算法是快速查找key的值,我们需要查找的就是元素值,所以key中存放元素值,value中存放其索引。
4.{a,c}相当于vector<int>其中有这两个元素。
5.map的insert类型只能为pair,不要忘记。
本题刷题出现的错误:5.
今日总结:时间安排确实存在问题,每天早上起来都没有动力,早睡早起,保持充足精力。