Вычислить максимальное количество последовательных элементов без повторений в векторе. c

#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 .