双指针维护窗口的左右端点,保证窗口内元素只出现一次
#include<bits/stdc++.h>
#define LL long long
#define x first
#define y second
#define de(x) cout<<#x<<" = "<<x<<" "
#define deg(x) cout<<#x<<" = "<<x<<endl
using namespace std;
const int N=1e5+10;
typedef pair<int,int> PII;
int n;
int a[N];
int cnt[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int res=0;
for(int i=1,j=1;i<=n;i++)
{
cnt[a[i]]++;
while(j<=i&&cnt[a[i]]>1)
{
cnt[a[j]]--;
j++;
}
res=max(res,i-j+1);
}
cout<<res<<endl;
return 0;
}