我有一个长度均匀的整数数组。例如,letš采用数组{0, 6, 4, 22, 19, 11}
。将所有数字配对成对,我必须找到最大的对数。现在,在所有可能的组合中,我必须找到最大的对和最小的情况。
在这种情况下,它将是23(当对为0-22,4-19,6-11时)。
现在我能想到的唯一情况是检查每一对可能的对和,查找最大的对并检查它是否小于上一次。然而,这是非常低效的,因为它需要在数组中循环,就像它的长度平方时间一样。我想知道是否有更有效的方法来做到这一点。
我正在考虑对数组进行排序并从第一个和最后一个元素中找到最大的和选择对,然后向内移动,可以工作,但我不确定在所有情况下是否都是这样。
答案 0 :(得分:0)
是的,所有情况都是如此!可以用数学证明!
假设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)配对,这是不可能的。
所以我们可以得出结论证明。
我不确定我是否清楚说明了这一点。
祝你好运!