假设有一个大小为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,那么至少有一对不能用相同的总和形成。希望我很清楚。
现在我的问题,这可以在某种程度上以线性时间完成吗?直接哈希数字是不够的,因为事先不知道“总和”。
答案 0 :(得分:1)
使O(n)-time通过该组数字以找到最小值和最大值并将所有数字放入哈希表中。计算目标总和t = max + min
。然后通过这组数字进行第二次O(n)时间的传递;对于数字x
,请计算y = t-x
,在哈希表中查找y
,如果已找到,请报告该对。关于重复,您还可以在哈希表中保留数字计数。
答案 1 :(得分:0)
找到数组的总和,将其加倍,然后除以N
。