最长连续不重复子序列

Posted waitti

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长连续不重复子序列相关的知识,希望对你有一定的参考价值。

最长连续不重复子序列

给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长度。

我们使用一个hash表和双指针动态维护双指针所夹区间内的信息。

i在前j在后。

每次i向前都使得hash[a[i]]++以此来增加序列中的元素。

接下来可能会出现冲突即[j, i]存在相同数字。

只要[j, i]存在相同数字即hash[a[i]] > 1 我们就让j++,同时使得hash[a[j]]--尝试移除序列前的元素使得冲突尽可能的被消减。

若执行完这个操作后仍有冲突则继续执行除非j > i。

另外每次找到不冲突序列后都更新res。

#include <bits/stdc++.h>

using namespace std;

const int N = 100010;

int a[N];

int main() {
    int n ;
    cin >> n;
    int j = 0, res = 1;
    unordered_map<int, int> s;
    for(int i = 0;i < n; i++)cin >> a[i];
    for(int i = 0;i < n; i++){
        s[a[i]]++;
        while(j <= i && s[a[i]] > 1)s[a[j++]]--;
        res = max(res, i - j + 1);
    }
    cout << res << endl;
}

以上是关于最长连续不重复子序列的主要内容,如果未能解决你的问题,请参考以下文章

最长连续不重复子序列

最长连续不重复子序列

AcWing 799. 最长连续不重复子序列

最长连续不重复子序列

AcWing 799. 最长连续不重复子序列

AcWing 799. 最长连续不重复子序列