【问题标题】:Find pairs of numbers of numbers in an array with all pairs giving the same sum在数组中找到成对的数字,所有对都给出相同的总和
【发布时间】:2013-09-20 00:51:30
【问题描述】:

假设有一个大小为 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}。答案 = 8

我试过的是

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

2) 求已排序数组的最小值和最大值之和。这是所需的总和,因为如果不是这两个,则至少有一对不能以相同的总和形成。希望我清楚。

现在我的问题是,这可以以某种方式在线性时间内完成吗?直接对数字进行散列是不够的,因为事先不知道“总和”。

【问题讨论】:

    标签: algorithm review


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      求数组的和,将其加倍,然后除以N

      【讨论】:

      • 虽然这是一种快速有效的查找 N 值的方法,但它没有说明如何找到添加的数字对(如问题所要求的那样)最多 N。
      • "Find pairs" 在标题中,"find the sum" 在第一段,"can this be linear" 在最后一段。 OP绝对可以澄清。但ans=8ans=9 似乎暗示 OP 只是想要总和。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2020-02-22
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多