題目:已知一串數字,從中取出最長的連續序列,其中沒有重複的數字。
分析:數據結構。set是紅黑樹,O(lgN)的操作複雜度(插入、刪除、查找)。
用set存儲不含相同數字的連續串,遇到相同的就刪除前面所有數字,取最大的|set|。
說明:忘記清空set導致WA了兩次╮(╯▽╰)╭。
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
int a[1111111];
int main()
{
int t, n;
while (~scanf("%d",&t))
while (t --) {
scanf("%d",&n);
for (int i = 0; i < n; ++ i) {
scanf("%d",&a[i]);
}
set <int>Set;
int max = -1, left = 0;
for (int i = 0; i < n; ++ i) {
while (Set.count(a[i])) {
Set.erase(a[left ++]);
}
Set.insert(a[i]);
if (max < i - left + 1) {
max = i - left + 1;
}
}
printf("%d\n",max);
}
return 0;
}