【问题标题】:Interview: sumPairs(array) output the sum of all summed pairs in O(n) time面试: sumPairs(array) 在 O(n) 时间内输出所有求和对的总和
【发布时间】:2015-07-29 15:27:52
【问题描述】:

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

给定一个包含 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 个元素。这怎么可能在线性时间内实现?

【问题讨论】:

  • 在面试中,准备一个非常简单的热身问题:如果你的答案不是,再想一想(问题可能是难的 …)。让我们希望这就是它。

标签: arrays algorithm big-o time-complexity


【解决方案1】:

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

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

这是基于每个元素与其他元素只添加一次的事实,因此总共添加了 n-1 次。

【讨论】:

  • 您的答案完全有效,但您能否解释一下您是如何得出 (n-1) 的。请。
  • @Shahzeb 我解释了,你添加每一对 (x+y),这意味着每个元素 x 与其他元素一起添加,每个元素添加一次(注意没关系如果是x+yy+x)。由于还有n-1 其他元素,所以x 正好添加了n-1 次。
  • 那么,你可以将乘法推迟到最后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
相关资源
最近更新 更多