【二刷代码随想录】双指针-数组相关题型、推荐习题

一、双指针-数组 相关题型与常用思路

1、单个数组

(1)原地移除元素类

        如推荐习题中的(1)、(2)、(3),都属于此类。引入双指针 pre、last ,用 pre 指针表明数组的最后位置;用 last 指针结合 for 遍历数组,去寻找不符合题意的元素,将其插入有效数组中,也就是 pre 位置,从而达到原地处理的要求。

        以题(2)为例:

class Solution {public int removeDuplicates(int[] nums) {//慢指针:指向最终数组的最后元素int low = 0;//在比较中将第一个元素视为不同元素int res = 1;//快指针从1开始,因为要默认保存第一个元素,后面的元素再进行比较for(int fast = 1; fast < nums.length; fast++){//若重合,则过滤不保存;除非不重合,则保存该元素if(nums[fast] != nums[low]){res++;low++;nums[low] = nums[fast];}}return res;}
}

(2)特殊规则处理元素

        如推荐习题中的(5),若要实现时间复杂度为 O(n),必然是使用双指针的。用双指针从数组的两侧往中间位置移动,直到遍历完所有元素。

class Solution {public int[] sortedSquares(int[] nums) {int len = nums.length;int[] res = new int[len];int i,j,x;i = 0;j = len - 1;x = len - 1;//从两端往中间依次判定while(i <= j){if(Math.abs(nums[i]) >= Math.abs(nums[j])){res[x] = nums[i] * nums[i];i++;}else{res[x] = nums[j] * nums[j];j--;}x--;}return res;}
}

(3)滑动窗口--待补充

2、两个数组

        一定规则下,比较两数组之间的关系,大多是相等关系。

        如推荐习题中的(4),若要实现时间复杂度为 O(m+n),必然是使用双指针的。结合提意,此题需要从尾部开始遍历,遇见特殊字符时,做好标记,以便直接跳过后续的字符。

class Solution {public boolean backspaceCompare(String s, String t) {int sLen = s.length();int tLen = t.length();int p1 = sLen - 1;int p2 = tLen - 1;int skipS = 0;int skipT = 0;//倒序处理字符串while(p1 >= 0 || p2 >= 0){while(p1 >= 0){if(s.charAt(p1) == '#'){    //  为退格符,则增加退格符数量skipS++;p1--;}else{                      if(skipS > 0){           //  为字母,且退格符数量为正数,则减少退格符数量   skipS--;p1--;}else{                  //  为字母,且退格符数量为0,则退出当轮循环break;}}}while(p2 >= 0){if(t.charAt(p2) == '#'){    //  为退格符,则增加更退格符数量skipT++;p2--;}else{                      if(skipT > 0){          //  为字母,且退格符数量为正数,则减少退格符数量  skipT--;p2--;}else{                  //  为字母,且退格符数量为0,则退出当轮循环break;}}}if(p1 >= 0 && p2 >= 0){         //对比两个字符串中有效字符是否相同if(s.charAt(p1) == t.charAt(p2)){p1--;p2--;}else{return false;} }else if(p1 < 0 && p2 >= 0 || p1 >= 0 && p2 < 0){   //或有一方已为空,而另一方不为空【若不处理会导致死循环!!】return false;}}if(p1 > 0 || p2 > 0){               //若经过上述比较,仍然存在至少一方不为空,则表明两字符不相同return false;}return true;}
}

二、推荐习题

(1)原地 移除元素

        27.移除元素

        给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

        假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

(2)原地 删除有序数组的重复项

        26.删除排序数组中的重复项

        给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

        考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

(3)原地 移除目标值到数组末尾

        283.移动零

(4)比较有效字符串

        844.比较含退格的字符串

(5)对有序数组元素的平方值,形成新有序数组

        977.有序数组的平方

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

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

相关文章

Level DB --- TableCache

TableCache 是Level DB 中重要的类&#xff0c;Level DB 中多层&#xff08;multi level&#xff09;&#xff0c;且每一层&#xff08;level&#xff09;有多个 key-value file&#xff0c;TableCache正是用来缓存多层以及多层中的file数据&#xff0c;更快速地检索。 table …

搜索-BFS

马上蓝桥杯了&#xff0c;最近刷了广搜&#xff0c;感觉挺有意思的&#xff0c;广搜题类型都差不多&#xff0c;模板也一样&#xff0c;大家写的时候可以直接套模板 这里给大家讲一个比较经典的广搜题-迷宫 题目问问能否走到 (n,m) 位置&#xff0c;假设最后一个点是我们的&…

智能预测维护:让设备“未卜先知”,减少宕机烦恼

智能预测维护:让设备“未卜先知”,减少宕机烦恼 1. 引言:设备维护的痛点与出路 在工业生产和自动化领域,设备故障一直是令人头疼的问题。设备一旦故障,轻则影响生产效率,重则造成严重损失,甚至带来安全隐患。传统的设备维护方式主要有两种: 被动维护(Reactive Maint…

安卓的布局方式

一、RelativeLayout 相对布局 特点&#xff1a;每个组件相对其他的某一个组件进行定位。 (一)主要属性 1、设置和父组件的对齐&#xff1a; alignParentTop &#xff1a; 设置为true&#xff0c;代表和父布局顶部对齐。 其他对齐只需要改变后面的Top为 Left、Right 或者Bottom&…

SSM中药分类管理系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…

epoch、batch、batch size、step、iteration深度学习名词含义详细介绍

卷积神经网络训练中的三个核心概念&#xff1a;Epoch、Batch Size 和迭代次数 在深度学习中&#xff0c;理解一些基本的术语非常重要&#xff0c;这些术语对模型的训练过程、效率以及最终性能都有很大影响。以下是一些常见术语的含义介绍&#xff1a; 1. Epoch&#xff08;周…

React(七):Redux

Redux基本使用 纯函数&#xff1a;1.函数内部不能依赖函数外部变量&#xff1b;2.不能产生副作用&#xff0c;在函数内部改变函数外部的变量 React只帮我们解决了DOM的渲染过程&#xff0c;State还是要由我们自己来管理——redux可帮助我们进行管理 Redux三大特点 1.单一数…

《Android低内存设备性能优化实战:深度解析Dalvik虚拟机参数调优》

1. 痛点分析&#xff1a;低内存设备的性能困局 现象描述&#xff1a;大应用运行时频繁GC导致卡顿 根本原因&#xff1a;Dalvik默认内存参数与硬件资源不匹配 解决方向&#xff1a;动态调整堆内存参数以平衡性能与资源消耗 2. 核心调优参数全景解析 关键参数矩阵&#xff1…

STC89C52单片机学习——第38节: [17-2] 红外遥控红外遥控电机

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.03.30 51单片机学习——第38节: [17-2] 红外遥控&红外遥控电机 前言开发板说明引用…

计算机组成原理————计算机运算方法精讲<1>原码表示法

第一部分:无符号数和有符号数的概念 1.无符号数 计算机中的数均存放在寄存器当中,通常称寄存器的位数为机器字长,所谓无符号数,就是指没有fu5号的数,在寄存器中的每一位均可用来存放数值,当存放有符号数时,需要留出位置存放符号,机器字长相同时,无符号数与有符号数所…

【什么是机器学习——多项式逼近】

什么是机器学习——多项式逼近 机器学习可以分成三大类别,监督学习、非监督学习、强化学习。三大类别背后的数学原理不同。监督学习使用了数学分析中的函数逼近方法和概率统计中的极大似然方法;非监督学习使用聚类和EM算法;强化学习使用马尔可夫决策过程的想法。 机器学习的…

Ubuntu 22.04 上安装阿里云 CLI(命令行工具)

在 Ubuntu 22.04 上安装阿里云 CLI&#xff08;命令行工具&#xff09;可以通过以下步骤完成&#xff1a; 步骤 1&#xff1a;下载阿里云 CLI 安装包 打开终端&#xff0c;首先更新你的软件包索引&#xff1a; sudo apt update安装 curl&#xff08;如果还没有安装&#xff09…

​Android Gradle 插件(AGP)版本与 ​Gradle 版本需要严格对应

一、AGP 与 Gradle 版本对照表 Android Gradle 插件版本对应 Gradle 版本适用 Android Studio 版本​8.1.x8.2Arctic Fox (2020.3.1+)​8.0.x8.0Arctic Fox (2020.3.1+)​7.4.x7.5.1IntelliJ IDEA 2022+​7.3.x7.4IntelliJ IDEA 2022+​7.2.x7.3.3IntelliJ IDEA 2021.3+​7.1.x…

【Matlab】-- 基于MATLAB的灰狼算法优化支持向量机的回归算法

文章目录 文章目录 01 内容概要02 GWO-SVR模型03 部分代码04 运行结果05 参考文献06 代码下载 01 内容概要 GWOSVR&#xff08;基于灰狼算法优化的支持向量机回归&#xff09;是一种先进的机器学习技术&#xff0c;它结合了灰狼优化算法&#xff08;Grey Wolf Optimizer, GWO…

Google Play Games PC版即将正式上线!

早在 2021 年&#xff0c;谷歌就推出 Google Play Games PC 版&#xff0c;本质上是基于虚拟化创建安卓系统在 Windows 上运行 Google Play 平台的各种游戏。 在测试了 4 年后&#xff0c;谷歌准备在今年晚些时候正式上线该平台&#xff0c;谷歌将在下周举办 2025 游戏开发者大…

【SpringBoot】深入解析使用配置文件解决硬编码问题综合练习(三):解析验证码拓展问题

校验输入验证码接口 check( ) 5. 为什么要用静态内部类接收配置文件中的 Seisson 对象&#xff1f; 为什么我们接收配置文件的 Session 对象时&#xff0c;使用静态内部类给 Session 对象的 key&#xff0c;date 属性赋值呢&#xff1f;不加 static 可以吗&#xff1f; 在 Cap…

day16 学习笔记

文章目录 前言一、广播机制二、数组遍历1.for循环2.nditer函数 三、数组操作1.reshape函数2.flat属性3.flatten函数4.revel函数5.数组转置6.升维与降维7.数组的连接与分割8.数组运算 前言 通过今天的学习&#xff0c;我进一步掌握了更多numpy的语法知识 一、广播机制 广播&am…

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候&#xff0c;通常使用easyexcel或者FastExcel&#xff0c;而fastexcel是easy的升级版本&#xff0c;今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表&#xff0c;组织表的字段…

Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64

​ rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast​ 编辑配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下载相关…

AI基础02-图片数据采集

上篇文章我们学习了文本的数据采集&#xff0c;今天主要了解一下图片数据采集的方法。图片采集方法通常有网页采集和实时采集&#xff08;传感器采集&#xff09;两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行图片数据的实时采集。 1&#xff09;cv2库简介 …