面试:sumPairs(array) 在 O(n) 时间内输出所有求和对的总和

Interview: sumPairs(array) output the sum of all summed pairs in O(n) time

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

Given an array with n numbers. Give an algorithm (sumPairs) to find the cumulative sum of the sum of all pairs of numbers. The algorithm should be O(n) time.

For example: sumPairs([1,2,3,4]):

All pairs are: (1+2) + (1+3) + (1+4) + (2+3) + (2+4) + (3+4)

Sum of all summed pairs: (1+2) + (1+3) + (1+4) + (2+3) + (2+4) + (3+4) = 30

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

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

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

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