Как вывести 2 подходящую по условию подпоследовательность?
Еле как решил таск по нахождению наиболее длинной подпоследовательности подряд идущих элементов, которые чередуются(Если таких подпоследовательностей несколько, то вывести вторую, а ещё вывести индекс первого элемента этой подпоследовательности и длину подпоследовательности).Например для :{ 4, 6, 1, 2, 1, 2, 3, 2, 3, 5, 4, 7, 4, 1, 5, 1, 5, 6} ответ будет {2, 3, 2, 3}. Чересчур намудрил, но сделал, а возращает всё для самой первой подпоследовательности.Как исправить?
public class Task7 {
public static void main(String[] args) {
NumSubSequence emptySeq = null; //временная пустая последовательность
NumSubSequence bigestSeq = new NumSubSequence(0, 0); //задаём начальный индекс и длину последовательности для будущей самой большой послед.
int [] sequence = { 4, 6, 1, 2, 1, 2, 3, 2, 3, 5, 4, 7, 4, 1, 5, 1, 5, 6};
try {
for (int i = 0; i < sequence.length - 1; i++) {
if ((sequence[i] == sequence[i + 2]) && (sequence[i] != sequence[i+1])) {
if (emptySeq == null) {
emptySeq = new NumSubSequence(i); //определяем начальный индекс для emptySeq
}
if (bigestSeq.lengthSeq < emptySeq.lengthSeq) {
bigestSeq = emptySeq; //присваем новую длину для последовательности
} else {
emptySeq.riseLength(); // увеличиваем длину на 1
}
} else emptySeq = null;
}
}
catch (ArrayIndexOutOfBoundsException a) {
System.out.println(a);
}
System.out.println(bigestSeq);
}
static class NumSubSequence {
int beginIndex;
int lengthSeq = 3;
public NumSubSequence(int NewBeginIdex) {
beginIndex = NewBeginIdex;
}
public NumSubSequence(int NewBeginIdex, int NewlengthSeq) {
beginIndex = NewBeginIdex;
lengthSeq = NewlengthSeq;
}
public void riseLength() {
lengthSeq++;
}
public String toString() {
return "NumSubSequence{" +
"beginIndex=" + beginIndex +
", lengthSeq=" + lengthSeq +
'}';
}
}
}
Вывод: NumSubSequence{beginIndex=2, lengthSeq=4}