【发布时间】:2015-07-25 23:40:20
【问题描述】:
我有一个关于数组的算法设计问题,应该用 C 语言实现。
假设我们有一个包含 n 个元素的数组。为简单起见,n 是“2”的幂,例如 1, 2, 4, 8, 16 , etc。我想用(n/2) 元素将它分成两部分。分离条件是 lowest absolute difference between sum of all elements in two arrays 例如,如果我有这个数组 (9,2,5,3,6,1,4,7) ,它将与这些数组 (9,5,1,3) 和 (6,7,4,2) 分开。第一个数组元素的总和是18,第二个数组元素的总和是19,差异是1,这两个数组是答案,但是像(9,5,4,2)和(7,6,3,1)这样的两个数组不是答案,因为元素总和的差异是4,我们找到了1。所以4 不是最小的区别。如何解决这个问题?
谢谢。
【问题讨论】:
-
PS,为什么
n的限制是2的幂?要拥有两个大小完全相同的子数组,您只需要n是偶数,而不是假设它是 2 的幂。 -
@amit 我认识这个朋友。但我认为在接下来的步骤中它将把它分成另一个部分,所以在这种情况下它需要一个 n
-
@therealprashant 不完全是骗子,因为这里对两个子集的基数有额外的限制(大小相同)
-
其实我应该说参考 而不是重复 。