题解:设置左右端点 l,r=0,当a[r]不在[l,r]区间是,r++;否则 l++,知道a[r]不在其区间中。
[l,r]区间中的元素可以用set进行判重和删除操作
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7;
int a[maxn];
int main()
{
int t,n;
cin>>t;
while(t--){
cin>>n;
int l=0,r=0;
set<long long>s;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int Max=0;
while(r<n){
while(s.count(a[r])) s.erase(a[l++]);
s.insert(a[r++]);
Max=max(Max,r-l);
}
cout<<Max<<endl;
}
return 0;
}