关于 哈希表的理论
- 今天最大的疑惑好像就是map的复杂度怎么算哈哈,一般n个元素map的复杂度就是On哦,不需要想得太复杂了,冲突的空间并不会造成一个量级,改变n前面的常数不会影响空间复杂度哈
- 提醒!熟悉好map,set的API哦
关于 有效的字母异位词
- 为什么遍历第二个字符串时只考虑碰到计数小于0的情况返回false而不考虑大于0的情况(即s字符串出现了t字符串中没有的字符)?
最开始会判断两个字符串长度是否相等,在两个字符串长度相同的情况下,如果有大于0的情况,一定对应地会出现其他字符小于0。 - python中
record = [0] *26
为什么不能写成record=[ ]*26
?
要初始化为0或者其他任何数字也行,不填的话编译器应该不知道原来的数字是多少
关于 快乐数
- sum重复出现,就肯定不是快乐数,为什么呢?
因为只要重复出现一次就说明会无限循环,就像之前链表那个环,假设a1算完等于a2,a2算完等于a3,a3算完等于a1,那么下一次a1算完必定等于a2,再下一次a2算完必定是a3,形成了一个循环,而这个循环中不可能有1,因为1平方的结果永远是1,所以肯定有循环就肯定不是快乐数,是快乐数就肯定没有循环 - 本题的代码随想录中的 js 示例代码用的map,其实效果和set都是一样的,都是标识某个数是否出现过,map的键也是唯一的。正如Java中,HashSet 和 LinkedHashSet 是基于 HashMap 实现的,而 TreeSet 是基于TreeMap实现的。这些map类都是用散列表或者红黑树来存储键值对的数据结构。
- 关于本题的时间复杂度,计算方式与一般题目略有不同:
关于 两数之和
- 一般说数组作为哈希表 是利用值作为数组下标来达到快速定位 所以查找也能达到O(1)的复杂度 但是适用范围很有限
- 用unordered_map不是不能存储两个相同的key吗,那如果数组里两个出现相同的两个元素都要存储会怎么样呢?
注意它存入的方式,它是在循环的过程中边检验边存的,如果没有对应的数字就存入map,如果有就计数,这样不会遇到重复的