AcWing799 最长连续不重复子序列
题目描述
给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。
输入格式
第一行包含整数n。
第二行包含n个整数(均在0~100000范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。
数据范围
\(1<=n<=100000\)
输入样例
5
1 2 2 3 5
输出样例
3
思路:双指针法,快指针j
具有一个单调性,即它只能向右走不能返回,在检查一个区间是否有重复元素时,用数组s[]
记录每个数值出现的次数。结合样例和代码体会吧。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100003;
int a[maxn];
int s[maxn];
int main(){
int n; cin >> n;
int res = -1;
for(int i = 0; i < n; ++i) cin >> a[i];
for(int 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;
}