计算向量中没有重复的连续元素的最大数量。(Calculate the maximum number of consecutive elements without repetitions in a vector. 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 && 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

所以基本上我正在寻找一些不适合我的代码的序列。

谢谢。

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.

最满意答案

问题在于

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

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

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.

更多推荐