题意:
给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\n",maxn); }}
时间: 2024-12-28 00:58:46