Проверка падает на последнем шаге, но не выводит последовательность, при которой упала.
package com.javarush.task.task08.task0812;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
/**
* Самая длинная последовательность
*/
public class Solution {
private static class Pair {
private int number;
private boolean done;
Pair(int number, boolean done) {
this.number = number;
this.done = done;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Pair that = (Pair) o;
return number == that.number && done == that.done;
}
@Override
public int hashCode() {
return Objects.hash(number, done);
}
@Override
public String toString() {
return "Pair{" +
"number=" + number +
", done=" + done +
'}';
}
}
private static class SequenceCounter {
private Map<Pair, Integer> numbers;
private Integer previousNumber;
SequenceCounter() {
this.numbers = new HashMap<>();
}
boolean hasNumber(Pair pair) {
return numbers.containsKey(pair);
}
void incrementCounter(Pair pair) {
int counter = numbers.get(pair);
numbers.put(pair, counter + 1);
}
void setCounter(Pair pair) {
numbers.put(pair, 1);
}
void completeSequence(Integer number) {
if (number == null) {
return;
}
Pair completedPair = new Pair(number, true);
if (hasNumber(completedPair)) {
return;
}
Pair uncompletedPair = new Pair(number, false);
Integer count = numbers.remove(uncompletedPair);
if (count == null) {
count = 1;
}
numbers.put(completedPair, count);
}
int getMaxCounter() {
return numbers.values().stream().max(Integer::compareTo).get();
}
Integer getPreviousNumber() {
return previousNumber;
}
void setPreviousNumber(Integer previousNumber) {
this.previousNumber = previousNumber;
}
}
private final static int PROBLEM_SIZE = 10;
public static void main(String[] args) throws IOException {
//напишите тут ваш код
SequenceCounter sequenceCounter = new SequenceCounter();
List<Integer> numbers = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < PROBLEM_SIZE; i++) {
int number = scanner.nextInt();
numbers.add(number);
Pair currentPair = new Pair(number, false);
// 1. Есть ли у нас еще незавершенная последовательность для этого числв?
if (sequenceCounter.hasNumber(currentPair)) {
sequenceCounter.incrementCounter(currentPair);
sequenceCounter.setPreviousNumber(number);
} else {
// 2. встретили число: начинающее новую последовательнось (т.е. старая последовательность завершена)
// 3. встретили число, начинающее новую последовательность, при этом не встречали до этого ни одной последовательности этого же числа
Pair uncompletedPair = new Pair(number, false);
sequenceCounter.setCounter(uncompletedPair);
Integer previousNumber = sequenceCounter.getPreviousNumber();
sequenceCounter.completeSequence(previousNumber);
}
}
System.out.print(sequenceCounter.getMaxCounter());
}
}