标签:
UVA 11572 唯一的雪花
题意:给你从1到n的数组,要求求得其中的最长连续不重复子序列,经典的滑窗问题,方法是维护一个窗口,设置左框和右框,然后不断的进行维护和更新
方法一:
#include"iostream"
#include"set"
#include"cstring"
#include"cstdio"
#include"algorithm"
using namespace std;
const int maxn=1000000+10;
set<int>book;
int a[maxn];
int main()
{
int T;
cin>>T;
while(T--)
{
int n,t,sum=0,ans=0;
cin>>n;
book.clear();
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int r=0,l=0;
for(;r<n;)
{
while(!book.count(a[r])&&r<n)
{
book.insert(a[r]);
r++;
}
ans=max(ans,r-l);
book.erase(a[l]);
l++;
}
cout<<ans<<endl;
}
return 0;
}
方法二:
#include"iostream"
#include"set"
#include"cstring"
#include"cstdio"
#include"algorithm"
using namespace std;
const int maxn=1000000+10;
int pos[maxn];
int a[maxn];
int main()
{
int T;
cin>>T;
while(T--)
{
int n,t,sum=0,ans=0;
cin>>n;
memset(pos,-1,sizeof(pos));
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int r=0,l=0;
a[n]=a[n-1];
for(int i=0;i<=n;i++)
{
if(pos[a[i]]>=l)
{
ans=max(ans,i-l);
l=pos[a[i]]+1;
}
pos[a[i]]=i;
}
cout<<ans<<endl;
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/zsyacm666666/p/4705309.html