【发布时间】:2014-05-21 13:08:42
【问题描述】:
我想计算索引 i 处的数字与 o(n) 中索引 i-1 之前的所有整数的绝对差之和。但我想不出比 o(n^2) 更好的方法。
例如:
[3,5,6,7,1]
具有绝对和的数组将是(对于索引 i 处的整数,总和将在另一个数组中的索引 i 处):
[0, 2, 4, 7, 17]
谁能帮我将复杂度降低到 o(n)(如果不可能,那么至少在时间复杂度方面有更好的优化)?
这是我的python代码:
a=[3,5,6,7,1]
n=5
absoluteSumArray=[]
for i in range(0,n):
Sum=0
for j in range(0,i):
Sum+=abs(int(a[i])-int(a[j]))
absoluteSumArray.append(Sum)
【问题讨论】:
-
[sum( abs(a[i] - a[j]) for j in range(i)) for i in range(n)]yield[0, 2, 4, 7, 17] -
@cdhagmann 很酷的故事,但 OP 已经有了 O(n^2) 解决方案
-
“我想计算索引 i 处的数字与索引 i-1 处的所有整数的绝对差之和”。但这不是您的代码正在做的事情。它正在计算索引 i 处的数字与索引 0 到 i-1 处的所有整数的绝对差之和。
-
O(n)看起来不太可能。 -
即使是 strictly easier problem(计算这个问题的输出总和)在几年前出现时也只能得到 O(nlog(n)) 的解决方案。