题目:
代码:
#include<iostream>
using namespace std;
const int N=10010;
int a[N],s[N];
int main(){
int i,j;
int n; scanf("%d",&n);
int res=0;
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(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;
}
运行结果:
刚开始我也不是太清楚,之后就拿1 2 2 3 1这个序列来解释,当指针碰到第2个2 大于1了,他就要重新把前面的计数清0然后重新开始计,代码很清晰明了