Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何从两个数组中选取元素,使总和最小?_Algorithm_Sorting - Fatal编程技术网

Algorithm 如何从两个数组中选取元素,使总和最小?

Algorithm 如何从两个数组中选取元素,使总和最小?,algorithm,sorting,Algorithm,Sorting,我有两个长度相等的数组,我可以从array1或array2中选择,总和的输出必须是最小的。但是,我从array1拾取元素的次数必须与从array2拾取元素的次数相同 例如: array1=[2,3,5,1] array2=[1,2,3,2] 输出将为8,因为: At index0: I picked 2 from array1. At index1: I picked 2 from array2. At index2: I picked 3 from array2. At index3: I p

我有两个长度相等的数组,我可以从array1或array2中选择,总和的输出必须是最小的。但是,我从array1拾取元素的次数必须与从array2拾取元素的次数相同

例如:

array1=[2,3,5,1]

array2=[1,2,3,2]

输出将为8,因为:

At index0: I picked 2 from array1.
At index1: I picked 2 from array2.
At index2: I picked 3 from array2.
At index3: I picked 1 from array1.
我目前的方法是:根据array1上的元素对数组对进行排序。所以我在index0和index1处选择了array1,然后在index2和index3处选择了array2

排序后的示例:

array1=[1,2,3,5]

array2=[2,1,2,3]

At index0: I picked 1 from array1.
At index1: I picked 2 from array1.
At index2: I picked 2 from array2.
At index3: I picked 3 from array2.
但是,当数组如下所示时,我可能会遇到一个问题:

array1=[2,3,5,1]

array2=[1,7,6,2]

根据数组1排序后:

array1=[1,2,3,5]

array2=[2,1,7,6]

At index0: I picked 1 from array1.
At index1: I picked 2 from array1.
At index2: I picked 7 from array2.
At index3: I picked 6 from array2.
理想溶液为:

At index0: I picked 2 from array2.
At index1: I picked 1 from array2.
At index2: I picked 3 from array1.
At index3: I picked 5 from array1.

有人能帮我解决这个问题吗?谢谢。

计算差分阵列1-阵列2:

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

diff   = [1, 1 ,2, -1]
index  = [0, 1, 2, 3]
对其排序(并记住索引):

必须对数组的一半求反才能得到最小和,因此index1,index2来自数组2

例2:

array1 = [2, 3, 5, 1]
array2 = [1, 7, 6, 2]

diff   = [1, -4 ,-1, -1]
index  = [0, 1, 2, 3]

sorted = [-4, -1, -1, 1]
index2 = [ 1, 2, 3, 0]
        array1 | array2

因此,从array2 index3,index0中取数。

计算差分array1-array2:

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

diff   = [1, 1 ,2, -1]
index  = [0, 1, 2, 3]
对其排序(并记住索引):

必须对数组的一半求反才能得到最小和,因此index1,index2来自数组2

例2:

array1 = [2, 3, 5, 1]
array2 = [1, 7, 6, 2]

diff   = [1, -4 ,-1, -1]
index  = [0, 1, 2, 3]

sorted = [-4, -1, -1, 1]
index2 = [ 1, 2, 3, 0]
        array1 | array2

因此,从array2 index3,index0中提取元素。

不清楚如何从数组中提取元素。假设有两个数组,a[i]和b[i]。我必须根据2个数组的输入输出最小的和数。但是,从a[i]拾取的元素的次数必须与b[i]相同。示例:左侧是a[i]的输入,右侧是b[i]21,32,53,12的输入。输出为8。因为我在索引0处选择了a[I],在索引1和2处选择了b[I],在索引3处选择了a[I],它给出了最小的和值。第一个数组示例的最小和是array1[3]+array2[0]不,假设array1和array2有4个输入,我必须从array1和array2中选择2个输入。所以它将是a[0]+b[1]+b[2]+a[3]=8,这将给出最小的和值。正如我所理解的:对于每个索引,您必须从array1或array2中选择,但array1的最终选择计数应该与array2的计数相同。不清楚如何从数组中选择元素。假设有两个数组,a[I]和b[I]。我必须根据2个数组的输入输出最小的和数。但是,从a[i]拾取的元素的次数必须与b[i]相同。示例:左侧是a[i]的输入,右侧是b[i]21,32,53,12的输入。输出为8。因为我在索引0处选择了a[I],在索引1和2处选择了b[I],在索引3处选择了a[I],它给出了最小的和值。第一个数组示例的最小和是array1[3]+array2[0]不,假设array1和array2有4个输入,我必须从array1和array2中选择2个输入。所以它将是a[0]+b[1]+b[2]+a[3]=8,这将给出最小的和值。正如我所理解的:对于每个索引,您必须从array1或array2中选择,但array1的最终选择计数应该与array2的计数相同。因此,array1的负差->元素小于array2的元素。(正差异-相反。)对差异数组进行排序时,将要从数组1中选择的索引向前移动,将要从数组2中选择的索引向后移动。我需要一段时间,直到我明白你的解决方案是如何工作的嘿,这真的很有帮助!非常感谢你!所以,数组1的负微分->元素比数组2的元素小。(正差异-相反。)对差异数组进行排序时,将要从数组1中选择的索引向前移动,将要从数组2中选择的索引向后移动。我需要一段时间,直到我明白你的解决方案是如何工作的嘿,这真的很有帮助!非常感谢你!