【基礎算法】最長連續不重復子序列


給定一個長度為n的整數序列,請找出最長的不包含重復數字的連續區間,輸出它的長度。

輸入格式

第一行包含整數n。

第二行包含n個整數(均在0~100000范圍內),表示整數序列。

輸出格式

共一行,包含一個整數,表示最長的不包含重復數字的連續子序列的長度。

數據范圍

1n100000            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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM