最长连续子序列---双指针

news2025/2/21 23:23:07

一、最长连续不重复子序列

 

核心思路:

        遍历数组a中的每一个元素a[i], 对于每一个i,找到j使得双指针[j, i]维护的是以a[i]结尾的最长连续不重复子序列,长度为i - j + 1, 将这一长度与r的较大者更新给r。
        对于每一个i,如何确定j的位置:由于[j, i - 1]是前一步得到的最长连续不重复子序列,所以如果[j, i]中有重复元素,一定是a[i],因此右移j直到a[i]不重复为止(由于[j, i - 1]已经是前一步的最优解,此时j只可能右移以剔除重复元素a[i],不可能左移增加元素,因此,j具有“单调性”、本题可用双指针降低复杂度)。
        用数组cnt记录子序列a[j ~ i]中各元素出现次数,遍历过程中对于每一个i有三步操作: 将a[i]出现次数cnt[a[i]]加1 -> 若a[i]重复则右移j(cnt[a[j]]要减1) -> 确定j及更新当前长度i - j + 1给r。
注意细节:

        当a[i]重复时,先把a[j]次数减1,再右移j。

#include<iostream>
using namespace std;

int cnt[100010];//记录元素出现次数,下标为元素,值为出现次数

int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    int ans=0;
    for(int i=0,j=0;i<n;i++)
    {
        cnt[a[i]]++;
        while(cnt[a[i]]>1)cnt[a[j++]]--;//先减次数后右移
        ans=max(ans,i-j+1);
    }
    cout<<ans<<endl;
    return 0;
}

 二、最长连续子序列

思路:寻找最长的一段区间,保证区间中不同数的种类<=2

#include <iostream>
using namespace std;

const int N = 100010;

int n;
int w[N], cnt[N];

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ ) scanf("%d", &w[i]);

    int res = 0;
    for (int i = 0, j = 0, s = 0; i < n; i ++ )
    {
        if (!cnt[w[i]]) s ++ ;//如果w[i]没出现过,区间中不同数的种类+1
        cnt[w[i]] ++ ;//w[i]出现次数+1

        while (s > 2)//不同数的种类超过2个,区间左端点右移
        {
            cnt[w[j]] -- ;//左端点的数出现次数减一
            if (!cnt[w[j]]) s -- ;
            //如果区间中没有其他的与左端点的数相同的数,
            //也就是减一以后区间中w[j]个数变为零,不同数的种类减一
            j ++ ;//左端点右移
        }

        res = max(res, i - j + 1);
    }

    printf("%d\n", res);
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/476934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XR技术在手术中的应用调研

虚拟现实、增强现实、混合现实等概念和技术是最近几年发展起来的&#xff0c;相信你对去年大火的元宇宙深有感触&#xff0c;元宇宙属于虚拟现实的技术范畴&#xff0c;头号玩家电影也让虚拟现实走进大众的视野中。早在2015年&#xff0c;笔者参加一次展会时就有接触&#xff0…

【数据库复习】第四章数据库恢复技术

一、事务 定义 一个数据库操作序列 一个不可分割的工作单位&#xff08;要么全做&#xff0c;要么不做&#xff09; 恢复和并发控制的基本单位 事务和程序比较 在关系数据库中&#xff0c;一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。 一个程序通常包含…

java倒序输出数字的方法

1.在输入框中输入一个整数&#xff0c;比如要输入“5”&#xff0c;需要输出倒序&#xff0c;可以使用数字键盘进行输入&#xff0c;也可以使用文本编辑器进行输入。 2.在命令行中输入“6”&#xff0c;如图所示。 3.选择一个字符串作为例子。使用字符串编辑器中的 reverse命令…

这个 Chrome 插件,让你的 ChatGPT 不再报错

ChatGPT的官网最近几天报错越来越频繁了&#xff0c;相信大家都发现了。 一旦你离开页面时间比较久&#xff0c;再度返回跟它进行对话&#xff0c;就会出现如下报错&#xff1a; 虽然这个报错信息以前也出现过&#xff0c;但现在的频率确实过高&#xff0c;对于每天需要使用 C…

“火灾不分昼夜,安全在我心中”——五一前厂房消防检查纪实

检查人员: Scott, Jason, Willson, Hanson 检查时间: 2023年4月28日 检查地点: 1厂房、2厂房室内外 检查内容: 一、室内外消火栓: 室内栓外观正常&#xff1b; 室外栓: 栓体防冻防尘套破损、遗失&#xff0c;消防栓缺少防撞保护&#xff1b; 按规定距离厂房外墙不宜小于5…

gitlab部署及整合Jenkins持续构建(四)sonarqube9.9安装和使用(一步一坑)

文章目录 postgresql13.0安装1、配置postgresql数据库2、进入postgresql创建数据库 代码质量管理平台--sonarqube安装1、前置依赖下载2、安装unzip并解压sonarqube并移动到/usr/local&#xff1a;3、修改sonarqube相应的配置4、新增用户&#xff0c;并将目录所属权赋予该用户&a…

回村准备结婚了~

小伙伴们大家好&#xff0c;我是阿秀。 这几天是一年一度的五一假期&#xff0c;前几年因为疫情的存在&#xff0c;很多人的五一假期都只能憋在家里&#xff0c;不知道今年各位有没有出去游玩的计划和打算&#xff1f; 昨晚刷朋友圈看到很多人都在晒行程的&#xff0c;有打算去…

【MATLAB数据处理实用案例详解(19)】——利用神经模糊控制实现对洗衣机的控制

目录 一、问题描述二、洗衣机模糊控制三、运行结果四、完整代码 一、问题描述 20世纪90年代初期&#xff0c;日本松下公司推出了神经模糊控制全自动洗衣机这种洗衣机能够自动判断衣物质地的软硬程度、衣量多少、脏污程度和性质等&#xff0c;应用神经模糊控制技术&#xff0c;…

JavaScript实现输入成绩,输出成绩等级的代码

以下为实现输入成绩&#xff0c;输出成绩等级&#xff08;switch语句&#xff09;的代码和运行截图 目录 前言 一、实现输入成绩&#xff0c;输出成绩等级 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录…

C#底层库--自定义进制转换器(可去除特殊字符,非Convert.ToString方式)

系列文章 C#底层库–程序日志记录类 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/124187709 C#底层库–MySQLBuilder脚本构建类&#xff08;select、insert、update、in、带条件的SQL自动生成&#xff09; 本文链接&#xff1a;https://blog.csd…

从南极到你家,易开得,一支“中国芯”的奇幻漂流

2023年的AWE&#xff0c;精彩程度比我想象中还要夸张&#xff01; 一方面是热度空前&#xff0c;现场人头攒动&#xff0c;有一家老中幼三代一起来观展的&#xff0c;有经销商、客户来问价采购的&#xff0c;还有行业媒体举着单反、手机、摄像机激情拍照的&#xff0c;让我们正…

4月30日第壹简报,星期日,农历三月十一

4月30日第壹简报&#xff0c;星期日&#xff0c;农历三月十一坚持阅读&#xff0c;静待花开1. 五一小长假首日全国铁路迎客流高峰&#xff0c;创铁路单日客流历史新高&#xff0c;旅游订单量较春节假期首日增长668%。2. 六大国有银行一季报业绩披露&#xff1a;共赚近3600亿元&…

chatgpt 数据相关应用论文策略简介

hatGPT等预训练大模型&#xff0c;一个核心能力就是经过海量语料的训练加上强化学习的引导&#xff0c;其具有强大的接近人类的文本生成能力。这个能力的一大用途&#xff0c;就是可以为我们生产数据或者标注数据&#xff0c;再基于这些数据训练我们自己的模型。 On the Feasi…

B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能

B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能 文章目录 B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能每博一文案1. Cookie 的概述2. session 与 Cookie 之间的联系&#xff1a;3. Cookie 的作用&#xff…

Android 9.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(一)

1.前言 在9.0的系统rom产品定制化开发中,在原生系统SystemUI下拉状态栏的通知栏的通知背景默认是白色四角的背景, 由于在产品设计中,需要把四角背景默认改成圆角背景,所以就需要分析系统原生下拉通知栏的每条通知的默认背景, 然后通知显示流程,设置默认下拉状态栏UI中的…

LaTeX基础文本排版命令

LaTeX基础文本排版命令 1. 字体大小2. 字体的粗体与斜体2.1. 粗体2.2 斜体2.3 同时启用粗体和斜体 3. 空格长度4. 高度与宽度尺寸 在LaTeX中&#xff0c;文本排版可以通过简单的命令实现&#xff0c;这些命令可以控制字体大小、粗体与斜体、空格、行高和宽度等方面&#xff0c;…

【C++】模板进阶:非类型模板参数模板的特化模板分离编译

文章目录 1. 非类型模板参数2. 模板的特化1. 概念2. 函数模板特化3.类模板特化 3. 模板分离编译4. 模板总结 在之前的博客中我们初次接触到了泛型编程和模板的概念 【C】模板初阶&#xff0c;当时只讲了一些基本的用法&#xff0c;现在做一些补充 1. 非类型模板参数 模板参数…

js判断是否为null,undefined,NaN,空串或者空对象

js判断是否为null&#xff0c;undefined&#xff0c;NaN&#xff0c;空串或者空对象 这里写目录标题 js判断是否为null&#xff0c;undefined&#xff0c;NaN&#xff0c;空串或者空对象特殊值nullundefinedNaN空字符串&#xff08;""&#xff09;空对象&#xff08;…

【Linux】4. 开发工具的使用(yum/vim)

前言 工具的本质就是指令 在介绍工具之前先介绍一下互联网生态 Linux 软件包管理器 yum 1. 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以…

【算法】一文彻底搞懂ZAB算法

文章目录 什么是ZAB 算法&#xff1f;深入ZAB算法1. 消息广播两阶段提交ZAB消息广播过程 2. 崩溃恢复选举参数选举流程 ZAB算法需要解决的两大问题1. 已经被处理的消息不能丢2. 被丢弃的消息不能再次出现 最近需要设计一个分布式系统&#xff0c;需要一个中间件来存储共享的信息…