給定一個長度為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; }