双指针
-
快指针i指向当前 ’考虑放入序列中的数‘(序列的右端点),如若序列冲突,必定的a[i]这个数引起的;
-
慢指针j指向序列的左端点,发生冲突让慢指针右移,知道因加入a[i]引起的冲突消失
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1E5 + 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(res, i - j + 1);
}
cout << res << endl;
return 0;
}