首页 > 其他 > 详细

最长连续不重复子序列

时间:2020-06-26 22:01:59      阅读:77      评论:0      收藏:0      [点我收藏+]

最长连续不重复子序列

给定一个长度为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;
}

最长连续不重复子序列

原文:https://www.cnblogs.com/waitti/p/13196388.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!