Bootstrap

最长连续不重复子序列(双指针)

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e5+9;
ll a[N];
ll c[N];
void solve()
{
   int n;cin>>n;
   for(int i=1;i<=n;i++)cin>>a[i];
   for(int i=1;i<=n;i++)c[a[i]]=0;//计数器(表示每个数出现的次数),使a数组中的数都初始化为0
   ll ans=0;
   for(int i=1,j=0;i<=n;i++)
   {
       while(j<n&&!c[a[j+1]])//若c[a[j+1]]不为0,说明它出现过,重复了
       {
           j++;
           c[a[j]]++;//数组中的数在计数器中++
       }
       ans=max(ans,j-i+1ll);//每次更新子数组的长度
       c[a[i]]--;//将数组开头元素出现次数变为0
   }
   cout<<ans<<'\n';
}
int main()
{
   int t;cin>>t;
   while(t--)
   {
       solve();
   }
   return 0;
}

;