【发布时间】:2019-12-03 04:25:38
【问题描述】:
给定一个数字列表arr(未排序),找出其中最长的算术级数。
数组:整数 a
1 ≤ arr.size() ≤ 10^3。 和 -10^9 ≤ arr[i] ≤ 10^9.
例子:
arr = [7,6,1,9,7,9,5,6,1,1,4,0] ------------- - 输出 = [7,6,5,4]
arr = [4,4,6,7,8,13,45,67] -------------- 输出 = [4,6,8]
from itertools import combinations
def arithmeticProgression2(a):
n=len(a)
diff = ((y-x, x) for x, y in combinations(a, 2))
dic=[]
for d, n in diff:
k = []
seq=a
while n in seq:
k.append(n)
i=seq.index(n)
seq=seq[i+1:]
n += d
dic.append(k)
maxx=max([len(k) for k in dic])
for x in dic:
if len(x)==maxx:
return x
如果 arr.size() 足够大。我的代码将运行超过 4000 毫秒。
例子:
arr = [randint(-10**9,10**9) for i in range(10**3)]
运行时间 > 4000ms
如何降低上述方案的空间复杂度?
【问题讨论】:
-
缩进严重,请修复。
-
你看过很多关于
the Longest Arithmetic Progression的文章吗? -
你说运行时间大于4秒,但最后你要求降低……空间复杂度?
-
@n.'pronouns'm。 sr 这是我的第一篇文章。我会努力变得更好。
-
@MBo 是的,我有。但他们中的大多数人都在谈论排序数组。