#c #algorithm #vector #binary-search-tree #treemap
#c #алгоритм #вектор #двоичное дерево поиска #древовидная карта
Вопрос:
Привет, ребята, я должен вычислить самую длинную последовательность чисел без каких-либо повторений и вернуть размер подсегмента.
Дело в том, что в какой-то момент мне чего-то не хватает, но я не знаю, где.
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 amp;amp; 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
Итак, в основном я ищу какую-то последовательность, которая не работает с моим кодом.
Спасибо.
Комментарии:
1. вы написали код, который вы протестировали, все тесты, похоже, в порядке … поздравляем, что дальше?
2. случай № 2 кажется неправильным. 2 2 2 2 результат должен быть равен 1.
3. все в порядке, я просто написал это плохо, извините.
4. tobi303 Я знаю, что это плохо, потому что я должен загрузить его, и сайт, на который я его загружаю, определяет, нормально это или нет.
5. в основном я ищу какую-то последовательность, которая не работает с моим кодом.
Ответ №1:
Проблема заключается в
else {
a.erase(var);
a[var] = i;
}
Здесь вам нужно сделать больше. Попробуйте последовательность 1 3 4 2 3 4 2 8 9 10 11
.