题目描述
给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入
5
1 2 2 3 5
输出
3
#include<iostream>
using namespace std;
const int N = 100010;
int n;
int q[N], s[N];//s中记录值为下标的个数
//双指针算法
int main(){
cin >> n;
for(int i = 0; i < n; i ++) cin >> q[i];
int res = 0;
//j指向不重复序列的第一个值 i为最后一个值 长度为 i - j + 1;
for(int i = 0, j = 0; i < n; i ++){
s[q[i]] ++; //记录下标为q[i]出现的次数
//此时q[j]和q[i]是同一个值
while(j < i && s[q[i]] > 1) s[q[j ++]] -- ;
res = max(res, i - j + 1);
}
cout << res << endl;
return 0;
}