📅  最后修改于: 2023-12-03 15:27:58.236000             🧑  作者: Mango
Van Eck序列是一个自然数序列,从0开始。第n+1个数,是在序列中最后一次出现前一个数n上次出现时与最后一项的差。例如,前6个数字是0, 0, 1, 0, 2, 0,序列中的“2”是在序列中最后一次出现前的最后一个数字“0”与之前的倒数第二个“0”的差。
计算Van Eck序列的第N个词的出现,需要用到一个哈希表和一个列表。
def van_eck(n: int):
last_seen = {}
seq = []
last_number = 0
for i in range(n):
if i == 0:
seq.append(0)
last_seen[0] = 0
else:
if last_number not in last_seen:
seq.append(0)
last_seen[last_number] = i - 1
else:
distance = i - 1 - last_seen[last_number]
seq.append(distance)
last_seen[last_number] = i - 1
last_number = seq[-1]
return seq[-1]
assert van_eck(20) == 3
assert van_eck(100) == 5
assert van_eck(1000) == 5
本文介绍了如何计算Van Eck序列的前N个词中第N个词的出现,并提供了一个使用Python实现的算法。