【问题标题】:Smallest Largest Sum of Paired Array配对数组的最小最大和
【发布时间】:2017-10-05 07:05:36
【问题描述】:

我有一个偶数长度的整数数组。例如,让我们获取一个数组{0, 6, 4, 22, 19, 11}。将所有数字配对,我必须找到最大的配对总和。现在,在所有可能的组合中,我必须找到最大的对和最小的情况。 在这种情况下,它将是 23(当对是 0-22、4-19、6-11 时)。

现在我能想到的唯一情况是检查每组可能的对和,找到最大的对并检查它是否比上次小。然而,这非常低效,因为它需要像长度平方倍一样循环遍历数组。我想知道是否有更有效的方法来做到这一点。

我正在考虑对数组进行排序并从第一个和最后一个元素中选择对,然后向内移动,这可能可行,但我不确定这是否适用于所有情况。

【问题讨论】:

  • 你的问题是?

标签: arrays algorithm grouping


【解决方案1】:

是的,所有情况都是如此!可以用数学证明!

假设 2N 个数 a_1, a_2, a_3, a_4, ..., a_2N 是非递减数(排序后)。然后对是

a_1 和 a_2N

a_2 和 a_2N-1

...

a_N 和 a_N+1

这些总和中的最大值将是最小的。

假设 a_i 和 a_2N+1-i 对得到最大值 MAX。

然后我们将更改配对以查看是否可以获得更小的最大值。所以 a_2N+1-i 只能与 a_1, a_2, ..., a_i-1 配对以获得较小的最大值,同样,a_2N+2-i 也只能与 a_1, a_2, ..., a_i 配对-1, ...,所以对于 a_2N。

总共有 i 个数字 (a_2N+1-i, ..., a_2N) 必须与 i-1 个数字 (a_1, a_2, ..., a_i-1) 配对,这是不可能的。

所以我们可以得到证明的结论。

我不确定我是否清楚地声明了这一点。

祝你好运!

【讨论】:

  • 这似乎是一个评论,而不是一个答案
  • 你能给我证明吗?我需要看到它才能假设它完全正确。
  • 修改了答案中的简要证明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2017-02-13
  • 2012-02-11
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多