題目描述
給定一個長度為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為快指針,如果快指針的元素出現過,那麼就将慢指針往前走,并消除标記,直到把和快指針的元素相等的那個标記去掉。快指針每次往前走的是标記,慢指針走是取消标記,每次更新最大值就行了。