zoukankan      html  css  js  c++  java
  • 最长连续不重复子序列

    最长连续不重复子序列

    给定一个长度为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;
    }
    
  • 相关阅读:
    Out of Hay POJ
    Sum Problem hdu 1001
    N! hdu 1042
    线性表的链式表示和实现(插入删除建空合并)
    NYOJ 1007
    NYOJ 954
    NYOJ 998
    NYOJ 455
    NYOJ 975
    数据结构复习0---线性表
  • 原文地址:https://www.cnblogs.com/waitti/p/13196388.html
Copyright © 2011-2022 走看看