【发布时间】:2020-12-29 04:31:33
【问题描述】:
我在解决这个问题时遇到了一些问题:
给定一个ints 的数组,将输入分成两组,使它们的和尽可能接近,两组长度必须相等,或者如果输入是奇数长度,则一组可以有 1比另一个多。然后先打印较小的和,然后打印较高的和。
例如:
输入 -> [4,6,17,3,2,5,10]
输出 -> 23,24 ([17,5,2] , [10,6,4,3])
这是我想出的,到目前为止我测试过的都通过了,但我不知道它是否真的正确:
public static String closestSums(int[] input) {
Integer sum1 = 0;
Integer sum2 = 0;
Integer dif = 0;
Integer bigSum = 0;
List<Integer> list = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
for (int x = 0; x < input.length; x++) {
list.add(input[x]);
}
Collections.sort(list);
for (int x = list.size(); x >= 0; x--) {
bigSum += list.get(x);
if (dif == 0) {
dif = list.get(x);
list2.add(list.get(x));
}
else if (dif > 0) {
dif -= list.get(x);
list1.add(list.get(x));
}
else {
dif += list.get(x);
list2.add(list.get(x));
}
}
dif = Math.abs(dif);
if (dif != 0) {
sum2 = (bigSum / 2) + dif;
sum1 = bigSum / 2;
}
else {
sum2 = bigSum / 2;
sum1 = bigSum / 2;
}
return sum1 + ", " + sum2;
}
【问题讨论】:
-
向我们展示您的努力,以便我们为您提供帮助
-
发布我的答案,但必须全部输入,所以需要一两分钟
-
已发布,希望对您有所帮助
-
到目前为止我已经测试过,但我不知道它是否真的正确 如果它通过了所有测试,为什么它不正确?您是否测试了不同的输入数组?您是否测试了一个只有两个元素的输入数组?您是否测试了包含偶数个元素和奇数个元素的输入数组?
-
请参阅stackoverflow.com/a/65314921/585411 以获得更好的方法。