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

时间:2015-05-18 08:00:34

标签: 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的列表,存在n *(n-1)/ 2个元素。这怎么可能在线性时间?

1 个答案:

答案 0 :(得分:7)

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

sum = 0
for each x:
  sum = sum + x*(n-1)

这是基于这样一个事实,即每个元素与其他元素恰好相加一次,因此总共添加了n-1次。