Arrays 如何从两个数组中拾取元素,使总和之间的差值最小
有两个数组,其中两个数组的长度相同 数组A=一组非负整数 数组B=非正整数集 我必须为每个索引I选择A[I]或B[I],并想知道abs(总和)的最小值 e、 g 例1 A={1,2,3,4},B={-1,-2,-3,-4} 然后,通过选择1、-2、-3和4,abs(sum)的最小值将为0。(-1,2,3,-4)也起作用 例2 A={1,1,1,3},B={0,0,0,-3} 然后,通过选择1,1,1和-3,abs(sum)的最小值将为0Arrays 如何从两个数组中拾取元素,使总和之间的差值最小,arrays,algorithm,dynamic-programming,Arrays,Algorithm,Dynamic Programming,有两个数组,其中两个数组的长度相同 数组A=一组非负整数 数组B=非正整数集 我必须为每个索引I选择A[I]或B[I],并想知道abs(总和)的最小值 e、 g 例1 A={1,2,3,4},B={-1,-2,-3,-4} 然后,通过选择1、-2、-3和4,abs(sum)的最小值将为0。(-1,2,3,-4)也起作用 例2 A={1,1,1,3},B={0,0,0,-3} 然后,通过选择1,1,1和-3,abs(sum)的最小值将为0 我只能想一个简单的方法来计算每一个可能的组合,这需要指数时
我只能想一个简单的方法来计算每一个可能的组合,这需要指数时间。有没有更好的方法来解决这个问题?这可以在时间复杂度
O(n*num\u diff)
中完成,想象消极的一桶只是积极的一桶,我们正试图尽可能接近另一桶
JavaScript代码(adiff
是将项目放入其中一个存储桶时产生的差异):
函数f(A,B){
设diff=newset();
差异加(A[0]);
差异相加(-B[0]);
对于(设i=1;在最坏情况下不存在数值差异2^n?,这也是exponential@Tuto我的理解是,差异的数量将取决于值的范围。我认为你需要选择另一个选项…而不是为每个i选择A[i]或B[i]。在你的问题中添加n的约束和值的范围