思路:
先想出暴力的做法,然后用双指针算法进行优化
用另一个数组标记该数出现的频率,如果大于1的话说明重复了,那么j就需要往后移动,直到不出现重复的数为止
代码:
# include<iostream>
using namespace std;
const int N = 100010;
int a[N],s[N];
int n;
int main()
{
cin >> 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++]]--;
res = max(res,i - j + 1);
}
cout << res << endl;
return 0;
}