题目描述
给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。
输入格式
第一行包含整数n。
第二行包含n个整数(均在0~100000范围内),表示整数序列。
输出格式
共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。
数据范围
1≤n≤100000
输入样例
5
1 2 2 3 5
输出样例
3
#include<iostream>
using namespace std;
const int N = 1e6;
int n,t;
int a[N], s[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
int res = 0;
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 << endl;
return 0;
}
思路:利用双指针法,令j为慢指针,i为快指针,如果快指针的元素出现过,那么就将慢指针往前走,并消除标记,直到把和快指针的元素相等的那个标记去掉。快指针每次往前走的是标记,慢指针走是取消标记,每次更新最大值就行了。