UVa 11572 Unique snowflakes【滑动窗口】
题意:给出 n个数,找到尽量长的一个序列,使得该序列中没有重复的元素
看的紫书,滑动窗口来做的
当右端碰到有相同的数的时候,左端向前滑动一个数
模拟一个样例好理解些
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #include<queue> 10 #include<algorithm> 11 #define mod=1e9+7; 12 using namespace std; 13 14 typedef long long LL; 15 const int maxn=1000000+5; 16 int a[maxn]; 17 18 int main(){ 19 int t,n; 20 scanf("%d",&t); 21 while(t--){ 22 scanf("%d",&n); 23 for(int i=0;i<n;i++) scanf("%d",&a[i]); 24 25 set<int> s; 26 int l=0,r=0,ans=0; 27 while(r<n){ 28 while(r<n&&!s.count(a[r])) s.insert(a[r++]); 29 ans=max(ans,r-l); 30 s.erase(a[l++]); 31 } 32 printf("%d\n",ans); 33 } 34 return 0; 35 }