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;
    }
    
  • 相关阅读:
    NUnit进行单元测试
    VSTS 安装步骤
    使用 Visual Studio Team Test 进行单元测试
    vss使用技巧
    struts 2.1 action 学习
    apache2 反向代理
    zz mysql中文
    trac ubuntu 安装
    ejb 3中bean的种类
    linux下VsFTP配置全方案
  • 原文地址:https://www.cnblogs.com/waitti/p/13196388.html
Copyright © 2011-2022 走看看