关键在于 s[]数组中存放的值 s[x] 为 值x在 当前 [j,i] 中出现的次数。 当次数超过1时,就让j向前并且更新s[]
#include<iostream>
using namespace std;
const int N = 1e6+10;
int a[N],s[N];
int main()
{
int n;
scanf("%d",&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(j<=i && s[a[i]]>1)
{
s[a[j]]--;
j++;
}
res = max(i-j+1,res);
}
printf("%d",res);
}