2sum性能提升

时间:2017-04-14 08:27:26

标签: python performance data-structures

该文件包含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的说法来编辑代码,这是错误的。代码仍然很慢,但我现在知道更多了。

0 个答案:

没有答案