У меня есть программа, которая находит подпоследовательность с максимальной суммой элементов и если такие последовательности есть
(с такой же суммой, но разным количеством элементов, то выводит ту, в которой меньше всего элементов). Но есть еще одно условие
"если есть 2 и более последовательностей с одинаковым количеством и одинаковым количеством элементов, то отображать первую с начала списка". И выставляю последний.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//4 пп
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(-9999);
list.add(-9999);
list.add(100);//4
list.add(98);//5
list.add(-5555);
list.add(99);
list.add(99);
list.add(-7866);
list.add(6);
list.add(-3);
list.add(-13434);
list.add(99);//6
list.add(90);
list.add(8);
list.add(1);//9
list.add(-9999);
// list.add(99);//11
// list.add(99);//12
list.add(-9999);
//list.add(198);
list.add(-444);
list.add(-7444);
list.add(100);
list.add(90);
list.add(8);
list.add(-9999);
// list.add(100);
// list.add(98);
list.add(-5555);
if (list == null || list.size() == 0) {//проверка на пустоту листа
System.out.println("empty array");
return;
}
int maxSumStartIndex = 0;
int maxSumLastIndex = 0;
int maxSum = list.get(0);
int lastSumStartIndex = 0;
int lastSum = list.get(0);
for (int i = 1; i < list.size(); i++) {
lastSum += list.get(i);
if (lastSum < list.get(i)) {
lastSum = list.get(i);
lastSumStartIndex = i;
}
int maxSumLength = i - maxSumStartIndex;
if (maxSum < lastSum ) {
maxSumStartIndex = lastSumStartIndex;
maxSumLastIndex = i;
maxSum = lastSum;
}
if (maxSum == lastSum) {
if (maxSumLastIndex - maxSumStartIndex < i - lastSumStartIndex) continue;//для минимальной длины
maxSumStartIndex = lastSumStartIndex;//крч надо чтобы тут 11
maxSumLastIndex = i;// а тут 12
maxSumLength = maxSumLastIndex - maxSumStartIndex + 1;
}
}
System.out.println("sum( arr[" + maxSumStartIndex + "] .. arr[" + maxSumLastIndex + "] ) = " + maxSum);
for (int i = maxSumStartIndex; i <= maxSumLastIndex; i++) {
System.out.print(list.get(i) + " ");
}
}
}
ожидаемый результат: 100 98 (первый)
мой вывод: 99 99 (второй)