题意:
给n个数, n<=100W,求一个连续子序列,这个子序列中没有重复的数,问这个子序列最长是多少?
分析:
直接暴力破解就行,看当前数字的下一次出现在什么地方
代码:
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
int num[1000010];
int pos[1000010];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d",&n);
int ans=0;
int i;
for(i=0;i<n;i++)
scanf("%d",&num[i]);
memset(pos,-1,sizeof(pos));
int s=0,maxn=0;
num[n]=num[n-1];
for(i=0;i<=n;i++)
{
if(pos[num[i]]>=s)
{
int temp=i-s;
maxn=max(temp,maxn);
s=pos[num[i]]+1;
pos[num[i]]=i;
}
else
{
pos[num[i]]=i;
}
}
printf("%d ",maxn);
}
}