该文件包含100万个整数,包括正数和负数(可能会有一些重复!)。这是整数数组,文件的第i行指定数组的第i个条目。
任务是计算区间[-10000,10000](包括)中的目标值t的数量,使得输入文件中存在满足x + y = t的不同数字x,y。
数字答案是0到20001之间的整数。
#ans = 427
data, count, n = set(map(int, open('2sum.txt').read().splitlines())), 0, 1000003
def two_sum():
global count
H = []
for i in range(n):
H.append(set())
for x in data:
insert(H, x)
for t in range(-10000, 10000 + 1):
for x in data:
if t - x != x and lookup(H, t - x):
count += 1
print(count)
def insert(H, x):
H[hashfunc(x)].add(x)
def lookup(H, x):
if x in H[hashfunc(x)]:
return True
return False
def hashfunc(x):
return (x >> 10) % n
if __name__ == '__main__':
two_sum()
上面的代码太慢了。
编辑:我根据Willem Van Onsem关于使用像[set()] * n
这样的语法来初始化H的说法来编辑代码,这是错误的。代码仍然很慢,但我现在知道更多了。