Skip to content

Instantly share code, notes, and snippets.

@AndrewBystrov
Last active November 8, 2018 14:58
Show Gist options
  • Save AndrewBystrov/cfe3e784b7c66fdc81b4e22b3ed6a50c to your computer and use it in GitHub Desktop.
Save AndrewBystrov/cfe3e784b7c66fdc81b4e22b3ed6a50c to your computer and use it in GitHub Desktop.
Answer for 138
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Scratch {
public static void main(String[] args) {
out(new int[]{-1, 2, -1, 3, -4}); // -1 -1 -4
out(new int[]{-1, -2, -1, 13, -4}); // 13
out(new int[]{-1, -2, -1, -3, -4}); // -1 -2 -1 -3 -4
out(new int[]{-1, 2}); // 2
out(new int[]{-1, 0}); // -1
out(new int[]{0, 0, 0, 0, 0}); // 0
}
private static void out(int[] a) {
System.out.println(Arrays.toString(solve(a)));
}
private static Integer[] solve(int[] a) {
// суть состоит в том, чтобы разделить исходный массив на 2 массива,
// в первом будут только положительные числа, а во втором - только отрицательные
// вычислить сумму для каждого из массивов, сравнить по модулю и вывести тот массив,
// в котором сумма будет наибольшей
List<Integer> positiveList = new ArrayList<>();
long positiveSum = 0;
List<Integer> negativeList = new ArrayList<>();
long negativeSum = 0;
boolean containsOnlyZeros = true;
for (int i : a) {
if (i != 0) {
containsOnlyZeros = false;
}
if (i < 0) {
negativeSum += i;
negativeList.add(i);
} else if (i > 0) {
positiveSum += i;
positiveList.add(i);
}
}
//если наш исходнй массив состоял только из 0, то вернеммассив длины 1, состоящий из 0
if (containsOnlyZeros) {
return new Integer[]{0};
}
if (Math.abs(negativeSum) > positiveSum) {
return negativeList.toArray(new Integer[0]);
} else {
return positiveList.toArray(new Integer[0]);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment