双指针
时间复杂度一般为O(n),根据问题和序列特性用两个下标进行扫描
贴一个代码(最长不重复连续子序列)
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=1e5+10;
int a[maxn],s[maxn];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int res=0;
for (int i=0,j=0;i<n;i++)
{
s[a[i]]++;
while(s[a[i]]>1) s[a[j++]]--;
res=max(res,i-j+1);
}
cout<<res;
return 0;
}