【基础算法】最长连续不重复子序列
给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。
输入格式
第一行包含整数n。
第二行包含n个整数(均在0~100000范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。
数据范围
1≤n≤100000 1≤n≤100000
输入样例:
5
1 2 2 3 5
输出样例:
3
题目代码:
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; const int N = 100010; int s[N], a[N]; //储存某个数据在 区间[ij] 出现的次数 储存数据 int main() { int n, res = 0; scanf("%d", &n); for (int i = 0;i < n;i++) scanf("%d", &a[i]); //双指针,j表示左边边界,i表示右边边界。 for (int i = 0, j = 0;i < n;i++) { s[a[i]]++;//表示a[i]这个数在区间[i,j]中出现的次数+1 while (s[a[i]] > 1) {//遇到重复数据j移动到i的位置,并把s[]数据清零。 s[a[j]]--; j++; } res = max(res, i - j + 1);//每次循环更新最大长度。 } printf("%d\n", res); return 0; }