手撕算法-删除有序数组中的重复项 II

news2024/11/18 19:35:01

描述

image.png
例如:
输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3]
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。

分析

双指针, fast, slow。
nums[fast] 代表当前搜索的位置。
nums[slow] 代表下一个应该保留的元素,应该放置的位置。

遍历数组过程中,存在两种情况:

  1. nums[fast] == nums[slow-2] 代表 fast 位置的元素,出现了超过两次,不应该保留,直接忽略,fast++
  2. nums[fast] != nums[slow-2] 代表 fast 位置的元素出现的次数少于两次,应该保留,存在slow位置,nums[slow] = nums[fast] ,slow++, fast++

初始情况:
当数组的长度小于等于2的时候,无论两个元素是否重复,都是满足要求的,直接返回数组长度。

代码

根据分析流程写出代码

class Solution {
    // nums[fast] 表示待检查的第一个元素,nums[slow−1]为上一个应该被保留的元素所移动到的指定位置。
    // nums[slow]代表下一个可以保留元素存放的位置
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        if(n<=2) return n;

        int fast = 2, slow = 2;
        while(fast < n) {
            if(nums[fast] != nums[slow - 2]) {
                // 说明fast位置的元素可以被保留
                nums[slow] = nums[fast];
                slow++;
            }
            // 否则fast位置的元素无须保留,直接忽略,fast++;
            fast++;
        }

        return slow;
    }
}

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

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

相关文章

Redis高阶使用消息队列分布式锁排行榜等

一、前言 在大多数传统的web系统中&#xff0c;使用Redis一般都是作为缓存使用&#xff0c;在大数据查询时作为缓解性能的一种解决方案。博主的的系统中使用Redis也主要使用到缓存的作用&#xff0c;还有做了注册中心&#xff0c;分布式事务。其他的强大的功能&#xff0c;没有…

【微服务】以模块化单体架构开发微服务应用

目录 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战我们知道,起初,单体应用有显著的优势:它们更容易开发和部署。从开发人员的角度来看,这种简单性是有益的。一切都是集中的,可以快速更新任何部分的业务逻辑并立即看到结果。这种开…

2024046期传足14场胜负前瞻

2024046期售止时间为3月26日&#xff08;周二&#xff09;19点30分&#xff0c;敬请留意&#xff1a; 本期深盘多&#xff0c;1.5以下赔率5场&#xff0c;1.5-2.0赔率4场&#xff0c;其他场次是平半盘、平盘。本期14场整体难度不大。以下为基础盘前瞻&#xff0c;大家可根据自身…

CSS3实现的分享图标按钮动画特效代码

CSS3分享图标按钮动画特效代码是一款社会分享图标动画特效&#xff0c;鼠标移上去会有一个胶囊闪动的效果。源码由HTMLCSSJS组成&#xff0c;适合绝大部分web网站&#xff0c;可以把它做成一个组件添加到网站的文章页下面&#xff0c;给网站添加一个文章分享功能&#xff0c;也…

私有化视频会议的重要性与优势,WorkPlus Meet助您安全高效沟通

高效的视频会议是推动沟通与协作的重要手段。而选择私有化视频会议平台&#xff0c;保障企业信息安全和会议效果则显得尤为重要。WorkPlus Meet以其卓越的性能和全面的功能&#xff0c;助力企业实现私有化视频会议&#xff0c;提升沟通效果与协作效率。 私有化视频会议的重要性…

关于Java发邮件提醒写周报实现(一)环境搭建

背景 由于公司每周都要写周报&#xff0c;而日常工作很忙&#xff0c;所以很容易忘记这件事件&#xff0c;因此开发一个写周报提醒的机器人&#xff0c;进行特定时间提醒是时候写周报了。 有一个大前提&#xff0c;本技术实现&#xff0c;本着不开通任何收费服务的态度去考察使…

Jackson 2.x 系列【2】生成器 JsonGenerator

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 案例演示2.1 创建 JsonFactory2.2 创建 JsonGenerator2.3 写入操作2.4 查…

亚马逊跨境电商为什么要多备几个店铺?多店铺运营技巧

在亚马逊&#xff0c;链接断货超过15天的话就会降权&#xff0c;之后想要把权重升回来是要下不少功夫的&#xff0c;如果这时候有一个备用店铺的话&#xff0c;就可以跟卖自己大号的链接&#xff0c;先保持出单&#xff0c;把权重稳住那么多店铺就需要多个信用卡进行扣店铺租金…

小车倒立摆系统极点配置,LQR闭环控制

在之前直流电机控制仿真里有讲过状态控制的基本架构&#xff0c;有兴趣的同学可以再回去看看&#xff0c;链接如下好玩的直流电机调速实验、PID、极点配置、LQR、观测器&#xff1b;不讲大道理_lqr控制器观测器-CSDN博客 在专栏的前三篇文章 小车倒立摆物理建模与simulink仿真…

【Nebula笔记】简介及安装

目录 一、简介 (一) 什么是图数据库 二、安装 (一) 原生安装 (二) Docker & Docker compose 1. Docker安装 Linux Window 2. 部署NebulaGraph (三) to MAC 三、Nebula Graph Studio (一) 版本兼容性 (二) 原生安装 (三) Docker compose (四) 连接Nebula Gra…

Git——IDEA中的使用详解

目录 Git1、IDEA中配置Git2、将本地项目推送到远程仓库2.1、创建项目远程仓库2.2、初始化本地仓库2.3、连接远程仓库2.4、提交到本地仓库2.5、推送到远程仓库 3、克隆远程仓库到本地4、基本操作4.1、代码提交到暂存区4.2、暂存区代码提交到本地库4.3、推送到远程仓库4.4、撤销本…

主干网络篇 | YOLOv8改进之在主干网络中引入密集连接卷积网络DenseNet

前言:Hello大家好,我是小哥谈。DenseNet(密集连接卷积网络)是一种深度学习神经网络架构,它在2017年由Gao Huang等人提出。DenseNet的核心思想是通过密集连接(dense connection)来促进信息的流动和共享。在传统的卷积神经网络中,每个层的输入只来自于前一层的输出。而在…

【CDA二级数据分析备考思维导图】

CDA二级数据分析备考思维导图 CDA二级复习备考资料共计七个章节&#xff0c;如需资料&#xff0c;请留言&#xff0c;概览如下图&#xff1a;一、数据采集与处理1.数据采集方法2.市场调研和数据录入3、数据探索与可视化4、数据预处理方法 总结&#xff1a;以上为自己学习数据分…

MySQL临时表:临时存储数据的灵活利器

MySQL临时表&#xff1a;临时存储数据的灵活利器 MySQL临时表是处理数据时非常有用的工具&#xff0c;它提供了临时存储数据的能力&#xff0c;使得复杂查询、排序、聚合以及数据筛选变得更加高效和简单。在本文中&#xff0c;我们将深入探讨MySQL临时表的概念以及何时需要使用…

VBA即用型代码手册:保护公式单元格和删除所有空白工作表的代码

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

25.6 MySQL 子查询

1. 子查询 子查询(Subquery): 是SQL查询语句中的一个重要概念, 它允许在一个查询语句(主查询)中嵌套另一个查询语句(子查询). 这意味着一个查询可以作为另一个查询的输入或条件, 子查询可以出现在SQL语句的多个位置, 例如SELECT, FROM, WHERE等子句中.子查询通常用于以下几种情…

get_ipython()函数使用

今天发现一个很有意思的函数&#xff0c; 在jupyter notebook中&#xff0c;我也可以用命令实现这些值 get_ipython().system(nvidia-smi)结果如下 get_ipython().system(pwd)

nodeJs中实现连表查询

nodeJs中实现连表查询 router.post(/getOrder, async function(req, res, next) {let userId req.body.phone;let sql select * from orders where userId?;let orders await new Promise((resolve, reject) > {connection.query(sql, [userId], function(error, resul…

《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)

1.简介 对于前端隐藏元素&#xff0c;一直是selenium自动化定位元素的隐形杀手&#xff0c;脚本跑到隐藏元素时位置时报各种各样的错误&#xff0c;可是这种隐藏的下拉菜单又没有办法避免&#xff0c;所以非常头痛&#xff0c;这一篇只为交流隐藏元素自动化定位处理方法以及宏哥…

HarmonyOS(鸿蒙)应用开发——(一)

目录 1 创建hellopro项目 2 了解ArkTS 3 了解ArkTS的组件 4 组件介绍 4.1 常用基础组件&#xff1a; 4.1.1 Text 4.1.2 Button 4.1.3 TextInput 4.2 容器组件 4.2.1 Column 4.2.2 Row 5 案例——实现一个简易登录页面 5.1 在实现预览效果之前&#xff0c;我们…