计算向量中没有重复的连续元素的最大数量。 C ++

时间:2016-10-13 20:30:46

标签: c++ algorithm vector binary-search-tree treemap

大家好,我要计算最长的数字序列而不重复,并返回子段的大小。

关键是我在某些方面遗漏了一些东西,但我不知道在哪里。

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

所以基本上我正在寻找一些不能用于我的代码的序列。

感谢。

1 个答案:

答案 0 :(得分:0)

问题在于

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

你需要在这里做更多。尝试序列1 3 4 2 3 4 2 8 9 10 11