数组实现哈希表(开放寻址法)
直接贴代码
const int N=2e5+3, null=0x3f3f3f3f;
int h[N];
int find(int x){
int k=(x%N+N)%N;
while(h[k]!=null && h[k]!=x){
k++;
if(k==N)k=0;
}
return k;
}
问题
find
函数有什么作用?
重点–若找到某个数,则返回其下标,若没有找到,则返回是他应该存储的位置- 为什么
N=2e5+3
?
在开放寻址法中,一般会把寻址大小开到 数据范围 的2-3
倍 - 这里
null=0x3f3f3f3f
有什么作用
这里设置一个题目中取不到的数(>1e9),并且可以用memset(h,0x3f,sizeof h)
对齐进行赋值,memset
对h[]
中的每个元素的每个字节赋值为0x3f
,所以h[]
的每个元素的值都为0x3f3f3f3f
兄弟有时间填个邀请码hhhhhhhhh(可以得AC币,邀请码在学生认证那填) 我的邀请码是:GUDFH