向量中每2个元素之间的第K个和

时间:2015-04-05 12:53:15

标签: java arrays vector sum complexity-theory

我给了一个向量,我必须找到每2个元素的第K个和。我们假设我们对总和进行排序。

例如说我有矢量{1 4 5 6},我需要第4个总和。所有款项均为:

  • 1 + 1 = 2
  • 1 + 4 = 5
  • 4 + 1 = 5
  • 1 + 5 = 6
  • 5 + 1 = 6
  • 1 + 6 = 7

第四笔钱是6。

我知道最佳解决方案应该在O(n * log n)中,但有些事情我无法理解。我提出的唯一解决方案是非常明显的解决方案,你计算总和并对它们进行排序,然后选择第K个。

1 个答案:

答案 0 :(得分:0)

看起来你的例子可以归结为:

  • K = 1:第一个元素
  • K = 2,3:具有第二元素的第一元素
  • K = 4,5:具有第三元素的第一元素
  • K = 6,7:具有第四元素的第一元素
  • K = 8:第二个元素本身
  • K = 9,10:具有第三元素的第二元素
  • K = 11,12:具有第四元素的第二元素
  • K = 13:自身的第3个元素
  • K = 14,15:具有第4个元素的第3个元素
  • K = 16:自身的第4个元素

所以你拥有的是:

  • 第一个元素
  • N个元素对(1个,2个,2个,1个等):2 *(N-1)
  • 第二个元素。
  • (N-1)个元素对(2个,3个,3个,2个等):2 *(N-2)
  • 第3个元素本身
  • (N-2)元素对(3与4,4与3等):2 *(N-3)
  • 自身的第4个元素

等等。因此,您可以轻松地在O(n)中找到您的" main"元素,然后简单地找到使用另一个O(n)循环你的k元素。