【发布时间】:2022-01-03 16:25:41
【问题描述】:
我有一个偶数大小的数组,这是我的任务:
a) 丢弃数组中的任意 2 个元素。 b) 然后对元素进行配对,并计算配对中元素之间的差之和,使之和最小。
示例:
array size even say 8.
array elements : 1,3,4,6,3,4,100,200
Ans:
5
说明:
在这里,我将删除 100 和 200,因为将它们配对可以得到 (200 - 100) = 100 的差异。 所以剩下的元素是 [1,3,4,6,3,4] 最小和的对是:(1 3),(4 3),(6 4)。 = |3-1| = 2, |4-3|=1,|6-4| = 2. 所以总和 = 2 + 1 + 2 = 5
示例:
array size even say 4.
array elements : 1,50,51,60
Ans:
1
说明:这里我将去掉 1 和 60,这样我会得到最小的总和。 所以剩下的元素是 [50, 51],与相邻的 [50 51] = 1 相同。我的代码在这种情况下会失败并返回 49。
如何在java中实现这一点?
我尝试像这样对元素进行排序,但这不是所有类型输入的正确方法。
public static int process(int[] a) {
int n = a.length;
int n1 = n/2-1;
Arrays.sort(arr);
int sum = 0;
for(int i=0; i<n1*2; i+=2) {
sum += a[i+1] - a[i];
}
return sum;
}
【问题讨论】:
-
你能提供这不起作用的输入示例吗?您如何决定移除哪一对?
-
@Scott Hunter,我提供了它们,数组元素:1,50,51,60。对于这个输入,它失败了。我必须找到最小总和作为结果,因此我将删除任何 2 个元素。
-
您的代码似乎没有尝试删除 2 个元素;如果我错过了,你能指出它在哪里做的吗?
-
@ScottHunter,这部分代码执行
int n1 = n/2-1;然后i<n1*2。 -
对数组进行排序是第一步。接下来,计算相邻数字之间的差异。找到最大的差异并删除数字。重复找出最大的差异并删除数字。最后,计算剩余差值的总和。