声明
本文资料参考acwing算法基础课
地址:https://www.acwing.com
概述
- 解决问题:用数组模拟散列表
- 平均时间复杂度约为O(1)
- 包括四个部分:散列队头(邻接表头)h[N], 数组元素e[N], 下一跳ne[N], 下一次可用指针idx
- 求模一定要这样int k = (x % N + N) % N;
- 注意h初始化为-1
- 可以先写一个程序求一下最大素数
模板记忆
这个模板分为四个部分:
- 插入:求得散列值,使用头插法插入(静态链表)
- 查询:求得散列值,遍历对应链表
模板代码
void insert(int x)
{
int k = (x % N + N) % N;
e[idx] = x;
ne[idx] = h[k];
h[k] = idx ++ ;
}
bool find(int x)
{
int k = (x % N + N) % N;
for (int i = h[k]; i != -1; i = ne[i])
if (e[i] == x)
return true;
return false;
}