计算一个向量中不重复的连续元素的最大数目.c++

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

本文关键字:连续 元素 最大数 c++ 一个 向量 计算      更新时间:2023-10-16

大家好,我必须计算没有任何重复的最长数字序列,并返回子段的大小。

关键是我在某个地方错过了一些东西,但我不知道在哪里。

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

所以基本上我在寻找一些序列,不与我的代码工作。

谢谢。

问题在于

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

你需要做更多的事情。试试序列1 3 4 2 3 4 2 8 9 10 11