最长连续不重复子序列

AcWing-799-最长连续不重复子序列open in new window

分析

一个序列 - 头头指针。

实现

#include <iostream>
using namespace std;

const int N = 100010;
int a[N], cnt[N];

int main () {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++ i) scanf("%d", &a[i]);

    int res = 0;
    for (int j = 1, i = 1; j <= n; ++ j) { // [i, j]
        ++ cnt[a[j]];
        while (i < j && cnt[a[j]] > 1) -- cnt[a[i ++]];

        res = max(res, j - i + 1);
    }
    printf("%d", res);
    return 0;
}
最后修改于: