给定两个无序数组array1
和array2
,长度均为LEN
。对于任何i
(0<=i<LEN)
,我可以交换array1[i]
和array2[i]
的值。现在,我必须以某种方式交换它们,以便array1
和array2
的元素之和之间的差异最小。
例如:
array1=[1, 3, 5]
array2=[2, 4, 9]
现在,如果我交换两个数组的第三个成员(5和9),差异变为(1 + 3 + 9) - (2 + 4 + 5)= 2.
我找到了一个使用递归的解决方案。在我的解决方案中,我检查所有有效组合以及差异最小的地方,这是我的答案。但这里的运行时复杂度为O(2^LEN)
。我怎样才能更有效率地做到这一点?
P.S。数组索引从0开始。
答案 0 :(得分:1)
考虑第三个数组,其中ith
条目是ith
和array1
中array2
值的绝对差值。在新数组中为这些差异指定符号等同于决定是否在原始数组中交换值。您现在正在尝试解决最小化第三个数组中(可能符号交换)值的总和的问题。这是Partition Problem的优化版本。