加速嵌套循环

时间:2016-04-12 01:35:07

标签: python performance loops

我正在对三角数进行挑战。关键是要弄清楚任何两个三角数的和是否等于输入n。我得到了它的工作,但显然它需要太长时间,他们想要更快的东西。

我编写它的方式,它将所有三角形数字放入一个列表,然后我遍历列表以检查是否有任何数字符合条件。我不知道如何使循环更快,并阅读这里的类似帖子我不知道如何将它应用于这种情况。

以下是代码:

def Triangular(n):
    lst = []
    for i in range(1, n + 1):
        lst.append((i** 2 + i)//2)
    yn = False
    for i in lst:
        for j in lst:
            if i*i + j*j == n:
                yn =  True
                break
            else:
                continue
    return yn

1 个答案:

答案 0 :(得分:3)

将三角形数字的正方形放入d̶i̶c̶t̶i̶o̶n̶a̶r̶y集合(不是列表)。然后浏览d̶i̶c̶t̶i̶̶̶̶̶̶̶̶,并为每个密钥,询问密钥是否小于或等于n/2,并且n - key是否也是l̶i̶s̶t集合中的密钥。

最差的情况是O(n log n),而不是O(n^2),而且明显更快。

当然,break只会突破循环的一个级别,所以通过返回true可以更快地成功。