如何交换两个数组的成员,以便两个数组的元素之和的差异最小?

时间:2016-06-30 21:43:00

标签: arrays algorithm

给定两个无序数组array1array2,长度均为LEN。对于任何i (0<=i<LEN),我可以交换array1[i]array2[i]的值。现在,我必须以某种方式交换它们,以便array1array2的元素之和之间的差异最小。

例如:

array1=[1, 3, 5]
array2=[2, 4, 9]

现在,如果我交换两个数组的第三个成员(5和9),差异变为(1 + 3 + 9) - (2 + 4 + 5)= 2.

我找到了一个使用递归的解决方案。在我的解决方案中,我检查所有有效组合以及差异最小的地方,这是我的答案。但这里的运行时复杂度为O(2^LEN)。我怎样才能更有效率地做到这一点?

P.S。数组索引从0开始。

1 个答案:

答案 0 :(得分:1)

考虑第三个数组,其中ith条目是itharray1array2值的绝对差值。在新数组中为这些差异指定符号等同于决定是否在原始数组中交换值。您现在正在尝试解决最小化第三个数组中(可能符号交换)值的总和的问题。这是Partition Problem的优化版本。