hashMap

哈希表最大的优点是高效,在哈希表中插入、删除或查找一个元素都只需要O(1)的时间。因此,哈希表经常被用来优化时间效率。当然,在一些数据量固定的题目中,也常采用数组来模拟hashMap,因为数组可以随机访问,也是O(1)的时间复杂度。
hashMap涉及的题目大体包括两种:
  • 用hashMap存储之前出现过的变量来辅助搜索,比如两数之和相关的题目
    💰
    N数之和
  • hashMap数据结构设计类题目

hashMap设计类题目

这类题目一般不能简单采用hashMap来设计,通常会辅佐其他数据结构来设计,比如题结合双向链表来设计,题结合数组来设计。具体采用哪种数据结构,也该具体问题具体分析。

hashMap存储变量辅助搜索or数组充当hashmap优化空间效

记得用hash来存储之前搜索过的变量时,先取再放,尤其是在N数之和中。经典题目 242 先判断hashmap中有无,这时候判断的是之前有无出现过目标值。然后再将当前的值放进去,此时放进去的值可能是后面要找的目标值。反正记住先查再放。
用数组来建立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结果。