网址  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);

 #include <iostream>
#include <set>
#include <map>
#include <vector>
using namespace std; const int N = ; vector<int> v(N,); int t;
int n; int ans = -; vector<int> m(N,); int main()
{
cin >> t;
for(int i = ;i<=t;i++){
cin >> v[i];
} int l = ; int r = l+;
m[v[l]]++;
while (l <= r && l <= t && r <= t) {
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++;
}
//r索引元素进入滑动窗口
m[v[r]]++;
ans = max(ans, r - l + ); //下一轮比对
r++;
} cout << ans << endl; return ;
} 作者:defddr
链接:https://www.acwing.com/solution/AcWing/content/2069/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

AcWing 799. 最长连续不重复子序列的更多相关文章

  1. [AcWIng 799] 最长连续不重复子序列

    点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], s[N]; int mai ...

  2. AcWing 799. 最长连续不重复子序列 双指针(一般先写一个朴素暴力的做法,然后看两个指针直接是否存在单调关系,如果存在,就想方法优化)

    https://www.acwing.com/problem/content/801/ #include<bits/stdc++.h> using namespace std ; int ...

  3. 最长连续公共子序列(LCS)与最长递增公共子序列(LIS)

    最长公共子序列(不连续) 实际问题中也有比较多的应用,比如,论文查重这种,就是很实际的一个使用方面. 这个应该是最常见的一种了,不再赘述,直接按照转移方程来进行: 按最普通的方式就是,直接构造二维矩阵 ...

  4. HDU 3308 线段树 最长连续上升子序列 单点更新 区间查询

    题意: T个测试数据 n个数 q个查询 n个数 ( 下标从0开始) Q u v 查询 [u, v ] 区间最长连续上升子序列 U u v 把u位置改成v #include<iostream> ...

  5. leetCode刷题(找到最长的连续不重复的字符串长度)

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  6. 最长连续子序列 Longest Consecutive Sequence

    2018-11-25 16:28:09 问题描述: 问题求解: 方法一.如果不要求是线性时间的话,其实可以很直观的先排序在遍历一遍就可以得到答案,但是这里明确要求是O(n)的时间复杂度,那么就给了一个 ...

  7. pta 习题集 5-5 最长连续递增子序列 (dp)

    给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列.例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8). 输入格式: 输入第1行给出正整数n ...

  8. TOJ 5065: 最长连续子序列

    5065: 最长连续子序列   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 140   ...

  9. HDU 3308 线段树求区间最长连续上升子序列长度

    题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...

随机推荐

  1. Exceptionless应用--自定义插件

    遇到的问题/需求 这里会把一些敏感的参数记录下来,我们需要屏蔽掉,如图 我们希望日志里面有当前登录用户的信息,如图: 处理方法 tip:这里用的是.net非.net core 第一个问题(屏蔽敏感参数 ...

  2. C# 使用 csc.exe 实现命令行生成

    概述 CSC是什么呢?CSC就是 C-Sharp Compiler (中文就是C#编译器),作用是把我们的 cs 源文件变异成dll 或者是exe ,    一般安装完VS 后,就会有这个文件: 这里 ...

  3. Make a List View Editable 使列表视图可编辑

    In this lesson, you will learn how to make a List View editable. For this purpose, the DemoTask List ...

  4. 在linux环境下重启oracle数据库,解决密码过期的问题

    (1) 以oracle身份登录数据库,命令:su – oracle (2) 进入Sqlplus控制台,命令:sqlplus /nolog (3) 以系统管理员登录,命令:connect /as sys ...

  5. SERCOS总线程序相关

    SERCOS程序就是围绕主机发送MDT电报,伺服在下一个周期发送AT电报作为应答这个原则来实现的,这个过程是由控制字等控制实现的,读程序的时候如果忽略这点,可能在想程序从哪里读数据,在哪里写数据呢.. ...

  6. 【pycharm】Unable to save settings: Failed to save settings. Please restart PyCharm解决

    1.Unable to save settings: Failed to save settings. Please restart PyCharm解决 将工程的.idea目录删掉,重启pycharm ...

  7. div块水平居中,垂直居中

    水平居中一个div想要水平居中于它的父div中只需要给它加css属性margin:0 auto; 即可 <!DOCTYPE html> <html> <head> ...

  8. 编码方式ASCII、GBK、Unicode、UTF-8比较

    文章内容深度较浅,详细了解可到下链接:https://blog.csdn.net/QuinnNorris/article/details/78705723; 总结了以下几种编码方式: ASCII.GB ...

  9. 搞定vscode编写java(手把手篇)

    1: 下载VSCODE 本来我写过一个 vscode 编写java 帖子,但是 还是很多人私信我,下面写一个手把手教程 原文地址: https://www.cnblogs.com/dgwblog/p/ ...

  10. 洛谷 P4396 (离散化+莫队+树状数组)

    ### 洛谷P4396  题目链接 ### 题目大意: 有 n 个整数组成的数组,m 次询问,每次询问中有四个参数 l ,r,a,b .问你在[l,r] 的区间内的所有数中,值属于[a,b] 的数的个 ...