hashMap
哈希表最大的优点是高效,在哈希表中插入、删除或查找一个元素都只需要O(1)的时间。因此,哈希表经常被用来优化时间效率。当然,在一些数据量固定的题目中,也常采用数组来模拟hashMap,因为数组可以随机访问,也是O(1)的时间复杂度。
hashMap涉及的题目大体包括两种:
- 用hashMap存储之前出现过的变量来辅助搜索,比如两数之和相关的题目N数之和
- hashMap数据结构设计类题目
hashMap设计类题目
这类题目一般不能简单采用hashMap来设计,通常会辅佐其他数据结构来设计,比如题结合双向链表来设计,题结合数组来设计。具体采用哪种数据结构,也该具体问题具体分析。
hashMap存储变量辅助搜索or数组充当hashmap优化空间效
记得用hash来存储之前搜索过的变量时,先取再放,尤其是在N数之和中。经典题目 242
先判断hashmap中有无,这时候判断的是之前有无出现过目标值。然后再将当前的值放进去,此时放进去的值可能是后面要找的目标值。反正记住先查再放。
1371. 每个元音包含偶数次的最长子字符串 典中典 状态压缩
用数组来建立hashmap优化空间效率的题目
2013
字符串hash
典型的有字符串匹配算法Robin Karp算法。Rabin-Karp 演算法的詳細解析 – 拿鐵派的馬克 Blog (mark-lin.com)
通常,设定如下两个参数:
MOD = 2 ** 64 BASE = 131 或者 13331
且在使用减法的时候,应当
( source_hast - xxx + MOD) % MOD
, 不然,会出现负数滚动hash,通过滚动hash来计算子字符串匹配
先计算前缀hash,再利用 前缀hash值计算任意子串的hash后再挨个匹配
数组 原地hash
原地 hash 即用数组值作为hash结果。