繁体   English   中英

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

[英]How to swap members of two arrays so that the difference of sum of the elements of both arrays be minimum?

给定两个无序数组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) 我怎样才能更有效地做到这一点?

PS阵列索引从0开始。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM