Arrays 访谈:sumPairs(数组)输出O(n)时间内所有求和对的总和

Arrays 访谈:sumPairs(数组)输出O(n)时间内所有求和对的总和,arrays,algorithm,big-o,time-complexity,Arrays,Algorithm,Big O,Time Complexity,我最近在一次采访中被问到这个问题,只能给出一个二次解: 给定一个包含n个数字的数组。给出一个算法(sumPairs)来查找 所有数字对之和的累积和。算法 应该是O(n)时间 例如:sumPairs([1,2,3,4]): 所有对为:(1+2)+(1+3)+(1+4)+(2+3)+(2+4)+(3+4) 所有求和对的和:(1+2)+(1+3)+(1+4)+(2+3)+(2+4)+(3+4) =30 我的方法是生成所有2元组,NC2(N选择2),并保持它们的总和。然而,我不确定如何在线性时间内进行。

我最近在一次采访中被问到这个问题,只能给出一个二次解:

给定一个包含n个数字的数组。给出一个算法(sumPairs)来查找 所有数字对之和的累积和。算法 应该是O(n)时间

例如:sumPairs([1,2,3,4]):

所有对为:(1+2)+(1+3)+(1+4)+(2+3)+(2+4)+(3+4)

所有求和对的和:(1+2)+(1+3)+(1+4)+(2+3)+(2+4)+(3+4) =30


我的方法是生成所有2元组,NC2(N选择2),并保持它们的总和。然而,我不确定如何在线性时间内进行。据我所知,大小为n的列表中存在n*(n-1)/2个元素。这怎么可能在线性时间内实现

您不需要生成元组,只需将每个元素(n-1)添加几次:


这是基于一个事实,即每个元素与另一个元素一起添加一次,因此总共添加了n-1次。

在面试中,请准备一个非常简单的热身问题:如果你的答案不是,请重新思考(问题可能很难……)。希望是这样。你的答案完全有效,但你能解释一下你是如何得出(n-1)的吗。请。@Shahzeb我解释过,您添加每对
(x+y)
,这意味着每个元素
x
与其他元素一起添加,并且每个元素添加一次(请注意,无论是
x+y
还是
y+x
)。由于存在
n-1
其他元素,
x
被精确地添加
n-1
次。然后,您可以将乘法延迟到末尾。
sum = 0
for each x:
  sum = sum + x*(n-1)