两大类:开放寻址法、拉链法
N = 200003
null = 0x3f3f3f3f
h = [0x3f3f3f3f] * N
def find(x): # 返回的是哈希值,如果x已存在,则返回存在的位置,如果x不存在,则返回应该插入的位置
k = x % N
while h[k] != null and h[k] != x:
k += 1
if k == N:
k = 0
return k
思想
每一个位当作一个槽
如果几个数是冲突的,那么就会在该位置同时存几个数
代码实现
N =1000003
h = [-1] * N # 槽清空,空指针用-1表示
e= [0] * N
ne = [0] * N
idx = 0
def insert(x):
k = x % N # k为哈希值
#头插入节点
e[idx] = x
ne[idx] = h[k]
h[k] = idx
idx += 1
def find(x):
k = (x % N + N) % N
i = h[k]
while i != -1:
if e[i] == x:
return True
i = ne[i]
return False