题目
思路
用两个指针,i在j的右边,初始时i=j=0,然后移动i,每移动一次就让s[a[i]]加上1,再判断是否有次数大于1,如果有就要移动j,并减少s[a[j]]的次数。
代码
cpp
#include<iostream>
using namespace std;
const int N=100010;
int n;
int a[N],s[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>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]]--;
j++;
}
res=max(res,i-j+1);
}
cout<<res;
return 0;
}