在数组中查找数字对,所有对都给出相同的总和

时间:2013-09-20 00:51:31

标签: algorithm review

假设有一个大小为N的数组(N总是偶数)。给定数组的所有元素形成一对,在添加时给出相同的总和。找到总和。这绝对不是功课。例如:

A = {1,4,3,2,5,6,8,7}。 ans = 9因为{(1,8),(2,7),(3,6),(4,5)}形成总和9对。

也可能有重复。 B = {3,4,5,3,4,5}。 ans = 8

我试过的是

1)对数组= O(nlogn)进行排序。

2)找到排序数组的最小值和最大值之和。这是所需的总和,因为如果它不是这些2,那么至少有一对不能用相同的总和形成。希望我很清楚。

现在我的问题,这可以在某种程度上以线性时间完成吗?直接哈希数字是不够的,因为事先不知道“总和”。

2 个答案:

答案 0 :(得分:1)

使O(n)-time通过该组数字以找到最小值和最大值并将所有数字放入哈希表中。计算目标总和t = max + min。然后通过这组数字进行第二次O(n)时间的传递;对于数字x,请计算y = t-x,在哈希表中查找y,如果已找到,请报告该对。关于重复,您还可以在哈希表中保留数字计数。

答案 1 :(得分:0)

找到数组的总和,将其加倍,然后除以N