Search code examples
c++algorithmvectorbinary-search-treetreemap

Calculate the maximum number of consecutive elements without repetitions in a vector. c++


Hi guys i've to calculate the longest sequence of numbers without any repetitions and return the size of the sub-segment.

The point is that im missing something at some point but I don't know where.

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;
}

I've tried the following cases with this outputs and everything seems to be ok.

 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

So basically im looking for some sequence that doesn't work with my code.

Thanks.


Solution

  • The problem is with

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

    You need to do more here. Try the sequence 1 3 4 2 3 4 2 8 9 10 11.