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

    网址  https://www.acwing.com/solution/AcWing/content/2069/

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

    算法1
    (枚举) O(n)O(n)
    滑动窗口 记录窗口的起始点 l r
    同时使用一个数组或者map记录该窗口区间各个数字出现的次数(后来证明使用map会超时)
    vector[HTML_REMOVED] v(N,0);

    如果r增加的时候 添加的元素在区间已经有了 那么就从窗口起点开始逐个弹出 直到将重复的元素弹出
    这样r就可以添加滑动窗口区间了

    if (m[v[r]] ) {
    //说明r中的元素 已经在滑动窗口区间出现了 那么需要将区间里的元素弹出
    while (v[l] != v[r]) {
    if(m[v[l]]) m[v[l]]--;
    l++;
    }
    if (m[v[l]] )m[v[l]]--;
    l++;
    }
    每次添加成功 记录窗口的长度值 和答案比较 答案取值其中最大的值
    ans = max(ans, r - l + 1);

     1 #include <iostream>
     2 #include <set>
     3 #include <map>
     4 #include <vector>
     5 using namespace std;
     6 
     7 const int N = 1000010;
     8 
     9 vector<int> v(N,0);
    10 
    11 int t;
    12 int n;
    13 
    14 int ans  = -1;
    15 
    16 vector<int> m(N,0);
    17 
    18 int main()
    19 {
    20     cin >> t;
    21     for(int i = 1;i<=t;i++){
    22         cin >> v[i];       
    23     }
    24 
    25 
    26     int l = 1; int r = l+1;
    27     m[v[l]]++;
    28     while (l <= r && l <= t && r <= t) {
    29         if (m[v[r]] ) {
    30             //说明r中的元素 已经在滑动窗口区间出现了 那么需要将区间里的元素弹出
    31             while (v[l] != v[r]) {
    32                 if(m[v[l]]) m[v[l]]--;
    33                 l++;
    34             }
    35             if (m[v[l]] ) m[v[l]]--;
    36             l++;
    37         }
    38         //r索引元素进入滑动窗口
    39         m[v[r]]++;
    40         ans = max(ans, r - l + 1);
    41 
    42         //下一轮比对
    43         r++;
    44     }
    45 
    46     cout << ans << endl;
    47 
    48     return 0;
    49 }
    50 
    51 作者:defddr
    52 链接:https://www.acwing.com/solution/AcWing/content/2069/
    53 来源:AcWing
    54 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    cross apply / outer apply
    查看锁表
    常用的一些占位符
    如何将法向量转换到世界空间
    Essential Mathematics for Games and Interactive Applications
    下一本要看的书
    第五章第五节 四元数
    向量坐标转换、旋转矩阵以及视图转换
    怪诞行为学摘录
    unity3d发布apk资源打包和访问方式
  • 原文地址:https://www.cnblogs.com/itdef/p/10886600.html
Copyright © 2011-2022 走看看