码迷,mamicode.com
首页 > 其他好文 > 详细

最长连续不重复子序列

时间:2020-06-26 22:28:38      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:while   输出   信息   指针   its   using   冲突   连续   pre   

最长连续不重复子序列

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

最长连续不重复子序列

标签:while   输出   信息   指针   its   using   冲突   连续   pre   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!