алгоритм — Рассчитать максимальное количество последовательных элементов без повторений в векторе. Переполнение стека

Привет, ребята, я должен рассчитать самую длинную последовательность чисел без каких-либо повторений и вернуть размер подсегмента.

Дело в том, что я что-то упускаю в какой-то момент, но я не знаю где.

int resolverCaso() {
int num;
int cont = 0;
cin >> num;
int var;
TreeMap<int,int> a;
int aux;
int max = 0;

for (int i = 0; i < num; i++) {
cin >> var;
if (!a.contains(var)) {
a[var] = i;
aux = var;
cont++;

}
else {
if (a[aux]==i-1 && var==aux) {
cont = 1;
a = TreeMap<int, int>();
a[var] = i;
}
else {
a.erase(var);
a[var] = i;
}

}
if (cont > max) {
max = cont;
}
}
return max;
}

Я пробовал следующие случаи с этими выходами, и все, кажется, в порядке.

 E:1 2 3 1 2 3          O:3
E:2 2 2 2              O:1
E:4 5 6 7 6            O:4
E:7 8 9 10 7 8 9 11 2   O:6
E:7 8 9 10 10 10 1 2 3 4  O:5
E:3 4 2 3 4 2 8 9 10 11 O:7
E:0 O:0 ( empty vector ).
E:1 O:1

В общем, я ищу некоторую последовательность, которая не работает с моим кодом.

Благодарю.

0

Решение

Проблема с

        else {
a.erase(var);
a[var] = i;
}

Вам нужно сделать больше здесь. Попробуйте последовательность 1 3 4 2 3 4 2 8 9 10 11,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]