双指针算法(acwing)疑难讲解

2023-11-08

相信大家都是看完y总的课来看博客解惑的我会在这里分享一些我理解的细节

回顾一下题目

 直接上代码

#include<iostream>
using namespace std;

const int N = 1e5+10;

int n;
//s[N]来存贮从j 到  i的这个区间内的数字出现的次数(这里的j到i是没有重复数字的区间)
//j是一直往右走的那么它之前经过的数字也就没用了,s[]数组中也就没必要存储他们的出现次数了
//如果还存着他们的次数的话还可能影响下面操作的进行
//这也是为什么要s[a[j]]--的具体原因
int a[N],s[N];

int main(){
    cin>>n;
    int res = 0;
    for (int i = 0;i < n;i++)   scanf("%d",&a[i]);
    
    for (int i = 0,j = 0;i < n;i++){
        //s[a[i]]这样存储可以存下来相同数字的数量  因为数字相同的时候s[]数组的下标相同
        //所以当a[]数组中的出现相同的数字的时候在s[]中都是同一个位置
        s[a[i]]++;
        while(j <= i && s[a[i]] > 1){  //其中j<=i可有可无
            s[a[j]]--;
            j++;
        }
        res = max(res,i - j + 1);
        
    }
    cout<<res;
    return 0;
}

1. 

先看看        为什么 j 是单调的(只能往右走)

因为j和i这个区间内一定是最长的不重复区间所以j只要往左移动就会矛盾导致重复(不懂来看一个例子)

123445678

不难看出当 i 指向第二个4的时候(及重复的时候) j 就会移动当移动到和 无重复 数字的时候停止

所以j的位置前一个位一定会在j - i这个范围内有一个数字重复

2.
为什么j <= i可有可无,因为只有在区间内出现重复元素的时候j才会移动当j = i 的时候只有一个数组,绝对无重复,所以在j = i的时候一定会停止,最多达到j = i

3.

这两个步骤怎么理解   s[a[j]]--  ;  j++;

为什么要 s[a[j]]-- 

看这样一个例子

如果各位还有更好的理解思路和我的思路有问题都可以告诉我更正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双指针算法(acwing)疑难讲解 的相关文章

随机推荐

  • 6-6 找素数并保存到数组中

    本题目要求查找n m之间所有素数 存入一维数组a中 函数接口定义 int fun int n int m int a 其中 a 为存储的素数 函数返回素数的个数 裁判测试程序样例 include
  • 编译工具链和交叉编译工具链简易说明

    文章目录 编译工具链 交叉编译工具链 编译工具链 做C C 开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容 C C 的程序需要经过 gcc 等编译成二进制程序才能被计算机使用 这里的 gcc 通常是泛指 包括 gcc g
  • 关于stm32下载提示internal command error错误提示解决办法

    问题背景 最近新制作了一个关于stm32的PCB PCB电源供电是由12V降压5V 再降压到3 3V 并且预留了3 3V电源接口 打样贴片完成后准备下载程序 一开始我是为了测试方便 没有用12V供电 直接连接stlink 并且用了电脑5V降
  • 高效大数据开发之 bitmap 思想的应用

    作者 xmxiong PCG 运营开发工程师 数据仓库的数据统计 可以归纳为三类 增量类 累计类 留存类 而累计类又分为历史至今的累计与最近一段时间内的累计 比如滚动月活跃天 滚动周活跃天 最近 N 天消费情况等 借助 bitmap 思想统
  • mysql主从配置问题汇总及如何查看数据库的日志

    一 Could not execute Delete rows event on table yxjmanage ums user Can t find record in ums user Error code 1032 handler
  • 原生ajax运行原理,【前端自学之路】JS之原生AJAX原理

    Javascript Ajax 原理 什么是 AJAX AJAX Asynchronous JavaScript and XML 异步Javascript 和 XML AJAX 是指一种创建动态网页的开发技术 说白话点 AJAX 就是允许J
  • Android常见问题debug

    android util Log 常用的方法有以下5个 Log v Log d Log i Log w Log e 根据首字母对应 VERBOSE DEBUG INFO WARN ERROR 另外 Log太多时用来过滤和标识分类log信息
  • Git简单入门(学习笔记)

    Git简单入门 学习笔记 目录 一 Git概念 二 版本控制 三 Git下载与安装 四 Git结构 五 本地库与远程库的交互方式 六 代码托管中心 七 初始化本地仓库 一 Git概念 Git是一个免费的开源的分布式版本控制系统 可以快速高效
  • python在线评测系统_关于开源OJ_在线评测系统(Online Judge)设计与实现的研究与分析...

    标签 OJ是Online Judge系统的简称 用来在线检测程序源代码的正确性 著名的OJ有TYVJ RQNOJ URAL等 国内著名的题库有北京大学题库 浙江大学题库 电子科技大学题库 杭州电子科技大学等 国外的题库包括乌拉尔大学 瓦拉杜
  • LVS 之 集群搭建

    官网地址 http www linuxvirtualserver org zh lvs1 html 首先 准备4台虚拟机 一个用于客户端 一个用于LVS 调度器 2个用于后端服务器 LVS NAT配置 1 zk02 开启内核的核心转发功能
  • 在Python中使用StanfordOpenIE

    本文在 维基百科数据预处理的基础上进行 1 StanfordOpenIE简介 开放信息提取 open IE 是指从纯文本中提取关系元组 通常是二元关系 例如 Mark Zuckerberg 脸书 与其他信息提取的核心区别在于 这些关系的模式
  • mysql配置和使用中可能会出现的若干问题

    Manually delete the data folder created by yourself 删除自行创建的data文件夹 Then enter the bin directory under the administrator
  • QT应用开发基础

    目录 前言 Windows上搭建开发环境 C 基础 什么是C 什么是面向对象 什么又是面向过程 c 的灵魂 c 的类 对象 类的实例化 怎么访问类的成员 类的函数成员 类的访问修饰符 函数的重载 构造函数和析构函数 类的继承 虚函数和纯虚函
  • Android Studio 的NotePad制作(日志本)

    自己写的NotePad 一个星期左右的时间 完成了最基本的功能 但是 界面还是一如既往的shi 因为百度找的图标都不是那种成套的 想找的找不到 干脆下次自己画 NotePad的功能无非是对日志的增删改查 这次还加入了Preference的一
  • java零基础从入门到精通(全)

    目录 前言 1 入门知识 1 1 JDK JRE JVM区别 1 2 编译与运行理解 1 3 类体函数细节 2 语法 2 1 标识符与关键字 2 2 变量与数据类型 2 3 控制语句 3 方法 3 1 定义 3 2 方法重载 3 3 方法递
  • electron开发环境搭建

    开发环境 Node js Vscode vscode安装Debugger for Chrome 创建开发目录 也是解决方案 执行初始化命令 创建electronpicture工程 并添加main js和index html文件 npm in
  • 存储器容量、位宽及其地址线根数三者之间的关系

    转载于 http blog sina com cn s blog 498dc96f0100gc2r html 1 存储器 Flash ROM SST39VF1601 数据位宽为16位 16根数据线 20根地址线 2M 1M 16bit SD
  • PID算法(一)PID简介

    PID算法简介及实现代码 PID简介 智能车比赛中 用到了PID算法 写下来当一个总结 PID是很经典且应用很广泛的控制算法 依据误差来减少误差 PID PID分为三部分 P 比例 P增大 可以加快系统响应速度 但是不能从根本上消除静态误差
  • 搭建ChatGPT对话式小说

    牙叔教程 简单易懂 你只需要写一个开头 剩下的交给ChatGPT 视频查看效果 两个ChatGPT互聊 写小说 哔哩哔哩 bilibili 这是一种ChatGPT的展现方式 他把你主动问ChatGPT的这种方式 改为了ChatGPT和Cha
  • 双指针算法(acwing)疑难讲解

    相信大家都是看完y总的课来看博客解惑的我会在这里分享一些我理解的细节 回顾一下题目 直接上代码 include