《算法通关村——双指针妙用》
《算法通关村——双指针妙用》
删除元素
描述
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
例子1: 输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
例子2: 输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
三种解决方法解决
/*** 删除指定元素用快慢指针,慢指针用于填充不删除的值,快指针用于查找目标值* @param nums* @param val* @return*/
public static int removeElement(int[] nums,int val){int slow = 0;// fast充当快指针for(int fast = 0;fast<nums.length;fast++){if(nums[fast] != val){nums[slow] = nums[fast];slow++;}}return slow;
}/*** 对撞指针的方法,两个指针从两边走,左边如果不相等(不等于目标值)就往后,right等于目标值就往前。* @param nums* @param val* @return*/
public static int removeElement1(int[] nums,int val){int right = nums.length-1;int left = 0;while(left <= right){if((nums[left]==val) && (nums[right]!= val)){int temp = nums[right];nums[right] = nums[left];nums[left] = temp;}if(nums[left] != val) left++;if(nums[right]==val) right--;}return left;
}/*** 双指针+覆盖,这种就是直接覆盖了,如果从左开始有值等于目标值,就把他替换成从右边开始的值,然后右边指针移动,左边不动,* 然后再次判断左边原位置是否是目标值,如果是就继续覆盖,右边指针继续移动,如果不是左边指针移动。* @param nums* @param val* @return*/
public static int removeElement2(int[] nums, int val){int right = nums.length - 1;for(int left = 0; left<=right;){if(nums[left] == val){nums[left] = nums[right];right--;}else{left++;}}return right+1;
}
删除重复项
描述
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例1:
输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
例子2:
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
解决
/*** 删除数组中重复元素,返回数组的大小。慢指针进行存值覆盖,快指针判断是否为重复值。* @param nums* @return*/
public static int removeDuplicates(int[] nums){// slow表示可以放入新元素位置,索引为0的元素不用管.int slow = 1;// 循环起到了快指针的作用for(int fast = 0;fast < nums.length;fast++){if(nums[fast] != nums[slow-1]){nums[slow] = nums[fast];slow++;}}return slow;
}
近期在自学 Java 做项目,加入了一个编程学习圈子,里面有编程学习路线和原创的项目教程,感觉非常不错。还可以 1 对 1 和大厂嘉宾交流答疑,也希望能对大家有帮助,扫 ⬇️ 二维码即可加入。

也可以点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?
相关文章:
《算法通关村——双指针妙用》
《算法通关村——双指针妙用》 删除元素 描述 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组…...
postgresql|数据库迁移|ora2pg工具的web界面介绍
前言: ora2pg是一个比较强大的数据库迁移工具,那根据名字来说,也可以看出来,这个工具主要是用来配置去O化,将在运行的oracle数据库迁移到postgresql数据库内的 当然了,我们使用此工具主要还是用命令行&am…...
【zookeeper】zk的ZAB原子广播协议
zk的ZAB原子广播协议来源于paxos算法[1]。paxos算法是一种基于消息传递的消息一致性算法,其特点是在可靠的通信环境下,可以保证消息的最终一致性。paxos要求每台server都持有自己的一个事务id的记录,这个事务id会每通过一个提议就自增加一&am…...
【问题思考总结】为什么分布函数右连续要左闭右开
问题 这个问题困扰我很久了,虽然感觉没什么用,但是还是想着搞清楚一点。 思考 Q1:什么是右连续? A1:F(x0)F(x0),即函数在一点的右极限等于该点的函数值。 …...
解决 edge 浏览器开发者工具出不来的问题
文章目录 猜测原因问题现象尝试过程最终解决办法C盘爆满解决经过(拆东墙补西墙) 猜测原因 windows 系统更新导致电脑管家C盘迁移导致(我C盘爆满了,每天提醒看着膈应,想着清理一下) 问题现象 按F12 和 右键…...
嵌入式算法——傅里叶变换算法
文章引注 https://mp.weixin.qq.com/s/5VIpNWci9YLY3m4gcYd6-w 摘要 傅里叶变换的核心在于,“任何连续周期信号可以由一组适当的正弦曲线组合而成”,在这个基础上对信号的中特定频率的正弦波进行分解或者重组,基于频率方面分析波形。 1、傅…...
让数据“动”起来:Python动态图表制作详解
在读技术博客的过程中,我们会发现那些能够把知识、成果讲透的博主很多都会做动态图表。他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法。 数据暴增的年代,数据科学家、分析师在被要求对数据有…...
Python获取网络适配器接口的类型、状态IPv4和IPv6地址
参考CSDN博主「Kwoky」的https://blog.csdn.net/Kwoky/article/details/84858997的简介: psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来…...
无敌了!Redis进军磁盘存储!
在高手林立的数据库江湖,Redis就像一个刺客,或许不如经典数据库存在感强,但因其高性能的特质而在群英榜中独占一席。 作为缓存的首选内存数据库,Redis最近放出了一个大新闻——将磁盘作为分层存储体系结构的一部分,以…...
中文编程开发语言工具编程实际案例:台球棋牌混合计时计费软件使用的编程构件说明
中文编程开发语言工具编程实际案例:台球棋牌混合计时计费软件使用的编程构件说明 上图说明:该软件可以用于桌球和棋牌同时计时计费,在没有开台的时候,图片是处于等待状态,这使用编程工具中的固定图像构件,在…...
在线客服系统源码 客服系统源码
在线客服系统源码 客服系统源码 框架:Thinkphp5workerman,环境:nginxphp7.3mysql5.6 多商户客服、不限坐席、独立系统--数据存储自己服务器上,支持开启SSL、支持离线对话。 新款在线客服系统全开源无加密:多商户、国…...
抽象轻松java——简易图书馆前置
用Maven写一个垃圾的项目,第一步打开IDEA,点击创建,创建一个Maven <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</versi…...
图书推荐管理系统Python+Django网页界面+协同过滤推荐算法
一、介绍 图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构,后端采用Django作为逻辑处理,通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有&#…...
IT行业就业方向:探索未来的职业机会
引言: 随着信息技术的飞速发展,IT行业已经成为了当前最具活力和发展潜力的行业之一。在这个充满机遇和挑战的时代,选择一个好的就业方向对于个人的职业发展至关重要。本文将探讨IT行业中哪些方向具有更好的就业前景,并提供一些建…...
docker-compose安装ES7.14和Kibana7.14(有账号密码)
一、docker-compose安装ES7.14.0和kibana7.14.0 1、下载镜像 1.1、ES镜像 docker pull elasticsearch:7.14.0 1.2、kibana镜像 docker pull kibana:7.14.0 2、docker-compose安装ES和kibana 2.1、创建配置文件目录和文件 #创建目录 mkdir -p /home/es-kibana/config mkdir…...
k8s-----14、controller-Job和Cronjob
Job和Cronjob 1、Job(一次性任务)2、CronJob(定时任务) 1、Job(一次性任务) [rootmaster controlleryaml]# cat job.yaml apiVersion: batch/v1 kind: Job metadata:name: pi spec:template:spec:contain…...
蓝桥杯每日一题2032.10.24
蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 由于布局为两个字节为一行,那我们输入两个数就为一行,但是这两个数全部得用二进制进行表示使用bitset bitset:将一个数转化为二进制 bitset<8>:将一个数转化为8位…...
【AGC】更新应用信息报未知错误解决方法
【问题描述】 最近有几个开发者遇到了一个问题,他们在AGC控制台配置好应用信息的图标和截图之后,点击保存按钮会弹出“未知错误,请稍后再试”的异常报错,导致无法正确保存应用配置信息。 出错页面如图所示。 【解决方案】 …...
一个注解让 Spring Boot 项目接口返回数据脱敏
1 背景 需求是某些接口返回的信息,涉及到敏感数据的必须进行脱敏操作 2 思路 ①要做成可配置多策略的脱敏操作,要不然一个个接口进行脱敏操作,重复的工作量太多,很显然违背了“多写一行算我输”的程序员规范。思来想去ÿ…...
测试人员的KPI怎么设置
关于测试部的KPI,简单列举下自己所经历部门的考核指标: 工作量。根据平时跟踪的需求,编写的用例,提交的bug数等综合评估; 负责项目的质量。上线项目是否出现重大功能的事故, 如果出现了事故,分…...
从安装到实战:在快马平台部署一个基于openclaw的新闻采集demo
今天想和大家分享一个完整的实战项目:在InsCode(快马)平台上从零开始部署一个基于openclaw的新闻采集demo。这个项目特别适合想快速验证爬虫框架能力的朋友,因为平台的一键部署功能让我们能跳过繁琐的环境配置,直接进入实战环节。 为什么选择…...
Linux下C/C++高效调试工具与技巧全解析
1. Linux终端下C/C调试工具演进史作为一名长期在Linux环境下开发C/C程序的老兵,我深刻理解调试工作对开发效率的影响。很多人对GDB的印象还停留在原始的命令行界面,实际上经过多年发展,终端下的调试工具已经形成了完整的生态体系。从最基础的…...
2026年,行业内热门GEO搜索优化公司口碑究竟如何?
你是否在为提升品牌在搜索引擎上的排名而烦恼?是否因高昂的优化成本和复杂的操作望而却步?又或者担心优化效果不佳,无法实现询盘转化?今天,我们就来深入探讨一下2026年热门的GEO优化软件,看看哪款能真正解决…...
Vue 全屏应用中的层叠上下文与Teleport动态挂载策略
1. 理解层叠上下文与全屏模式的冲突 在开发Vue全屏应用时,很多开发者都遇到过这样的问题:明明在普通模式下运行良好的弹窗组件,一旦进入全屏状态就神秘消失了。这背后其实涉及到浏览器渲染机制中一个关键概念——层叠上下文(Stacking Context…...
SEO的黑帽和白帽技术分别是什么_如何查询网站的SEO指标和排名数据
SEO的黑帽和白帽技术分别是什么_如何查询网站的SEO指标和排名数据 在当今的互联网时代,搜索引擎优化(SEO)是提升网站流量和可见度的关键。SEO有许多技术和方法,其中包括白帽技术和黑帽技术。了解这些技术不仅有助于提升网站的搜索…...
开源工具DLSS Swapper:提升游戏帧率的智能版本管理方案
开源工具DLSS Swapper:提升游戏帧率的智能版本管理方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在3A游戏画面日益精美的今天,如何在不牺牲画质的前提下提升帧率成为玩家面临的普遍挑战。…...
实战踩坑:antv G6与vite集成时的兼容性难题与解决方案
1. 当antv G6遇上vite:开发环境与生产环境的"薛定谔式报错" 最近接手一个数据可视化项目,需要用到antv G6这个流程图工具库。开发阶段一切顺利,页面渲染流畅得像德芙巧克力。但当我用vite打包准备上线时,控制台突然抛出…...
效率飞跃:用快马平台快速测试与集成Copaw生成的用户认证模块
最近在开发一个需要用户系统的项目时,遇到了一个常见问题:如何快速验证从Copaw下载的认证模块代码是否真的能正常工作?传统方式需要手动搭建测试环境、配置数据库、编写测试用例,整个过程耗时耗力。直到发现了InsCode(快马)平台&a…...
javaweb高校学生宿舍管理系统的设计与实现
目录同行可拿货,招校园代理 ,本人源头供货商高校学生宿舍管理系统功能分析学生信息管理模块宿舍分配管理模块费用管理模块报修与维修管理模块访客与门禁管理模块卫生检查与评分模块系统管理模块技术实现要点项目技术支持源码获取详细视频演示 :文章底部获取博主联系…...
qifu科技工作纪要
1.select查字典<dol-select dict-codeorderDataChannel v-modelsyncPosForm.provider></dol-select><!-- tab --> <a-tabs default-active-key1 changetabChange><a-tab-pane key1 tab待提交></a-tab-pane><!-- <a-tab-pane key&q…...
