AcWing 840. 模拟散列表-python
原题链接
简单
作者:
Actor丶
,
2020-04-04 09:21:20
,
所有人可见
,
阅读 876
def insert(x):
"""头插法,将x查到单链表h[k]的头部"""
global idx
k = x%100003 # 100003是大于等于100000的第一个素数
e[idx] = x
ne[idx] = h[k]
h[k] = idx
idx+=1
def find(x):
"""查找x是否被插入"""
k = x%100003
i = h[k]
while i!=-1:
if e[i]==x:
return True
i = ne[i]
return False
if __name__=="__main__":
n = int(input().strip())
# 初始化邻接表
N = 100010 # 表示链表最多的节点数
h = [-1]*(N)
e = [0]*(N)
ne = [0]*(N)
idx = 0
for i in range(n):
op, x = input().split()
x = int(x)
if op=="I":
insert(x)
else:
flag = find(x)
if flag: print("Yes")
else: print("No")
def find(x):
global null
k = x%200003
while h[k]!=null and h[k]!=x: # 如果第k个位置有人,其不等于x,k+=1
k+=1
if k==N:
k = 0
return k # h[k]要么没人,要么等于x
if __name__=="__main__":
n = int(input().strip())
# 初始化h数组
N = 200010
null = 0x3f3f3f3f
h = [null]*(N)
for i in range(n):
op, x = input().split()
x = int(x)
k = find(x)
if op=="I":
h[k] = x
else:
if h[k]==x: print("Yes") # h[k]==x,表示查找到了x
else: print("No")
兄弟,为什么初始化h列表的时候要设置为h[-1]*N
我们用数组模拟链表时,-1表示空指针