【算法题解】5. 删除有序数组中的重复项 + 移动零

news2025/1/18 13:54:17

文章目录

    • 删除有序数组中的重复项
      • 题目
      • 解题思路
      • 代码实现
      • 复杂度分析
    • 移动零
      • 题目
      • 解题思路
      • 代码实现
      • 复杂度分析

删除有序数组中的重复项

题目

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

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k

不要使用额外的空间,你必须在原地修改输入数组 并在使用 O ( 1 ) O(1) O(1) 额外空间的条件下完成。
题目来自:leetcode

解题思路

  1. 新建一个变量 index,用来存储非重复元素下标,也就是更新后的数组的下标。
  2. 首先可以肯定的是第一个元素肯定是可以保留的,所以以 index = 1 开始,然后从 i = 1 开始遍历整个数组,当第 i 个元素和它前面的元素(i - 1)不一样的时候,即第 i 个元素是一个新的非重复数,可以放到新的数组,即nums[index] = nums[i],赋值完成后将index + 1
  3. 最后返回 index 为非重复数的个数,非重复数的下标位 0 ~ index - 1

图示:以数组int[] {1, 2, 2, 3, 4, 4}为例。
删除有序数组中的重复项

代码实现

class Solution {
    public int removeDuplicates(int[] nums) {
        int index = 1;
        for(int i = 1; i < nums.length; i++){
            if(nums[i] != nums[i - 1]){
                nums[index++] = nums[i];
            }
        }
        
        return index;
    }
}

复杂度分析

时间复杂度 O ( n ) O(n) O(n):n 为数组 nums 的长度。
空间复杂度 O ( 1 ) O(1) O(1)

移动零

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。题目来自:leetcode

解题思路

删除为0的元素,将所有非0元素按原顺序排列好, 剩下的位置补0

代码实现

class Solution {
    public void moveZeroes(int[] nums) {

        // 删除为0的元素,并按照原顺序排列。
        int index = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != 0){
                nums[index++] = nums[i];
            }
        }

        // 如果还有剩余的位置,全部补0
        if(index < nums.length){
            for(int i = index; i < nums.length; i++){
                nums[i] = 0;
            }
        }
    }
}

复杂度分析

时间复杂度 O ( n ) O(n) O(n)
空间复杂度 O ( 1 ) O(1) O(1)

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

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

相关文章

Python 并发编程实战,用多线程、多进程、多协程加速程序运行

Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行 文章目录Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行1、什么是CPU密集型计算、IO密集型计算&#xff1f;2、多线程、多进程、多协程的对比3、怎么根据任务选择对应技术&#x…

达梦数据成功过会!信创浪潮中如何成就一家国产龙头?

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年12月22日&#xff0c;上海证券交易所科创板上市委员会发布《2022年第110次审议会议结果公告》&#xff0c;武汉达梦数据股份有限公司&#xff08;首发&#xff09;符合发行条件、上市条件和信息披露要求。该公告标志着…

5.4 迭代语句

文章目录while语句使用while循环传统for语句传统for循环的执行过程for语句头中的多重定义省略for语句头的某些部分范围for语句do while语句迭代语句通常称为循环,它重复执行操作直到满足某个条件才停下来。while和for语句在执行循环体之前检查条件&#xff0c;do while 语句先执…

MATLAB算法实战应用案例精讲-【连接分析】PageRank(补充篇)(附Python代码实现)

前言 PageRank算法在1998年4月举行的第七届国际万维网大会上由Sergey Brin和Larry Page提出。PageRank是通过计算页面链接的数量和质量来确定网站重要性的粗略估计。算法创立之初的目的是应用在Google的搜索引擎中,对网站进行排名。 随着国内外学者的深入研究,PageRank算法…

burpsuite靶场——SSRF

文章目录针对本地服务器的基本 SSRF针对另一个后端系统的基本 SSRFSSRF 与基于黑名单的输入过滤器基于白名单的输入过滤器的 SSRFSSRF 通过开放重定向漏洞绕过过滤器带外检测的盲 SSRF利用 Shellshock 的盲 SSRF针对本地服务器的基本 SSRF 在商品下查看货物库存情况时抓包 有st…

操作系统实验2:fork()系统调用

操作系统实验2:fork()系统调用 文章目录操作系统实验2:fork()系统调用Task1: fork的基本使用代码运行结果解释Task2: 深入理解fork创建的子进程与父进程的关系代码实验结果现象解释遇到的问题1.乌龙事件 vscode2.the troubles encountered in task1如何跑.sh文件编译链接遇到的…

SegeX Progress:MFC通用进度条

----哆啦刘小洋 原创&#xff0c;转载需说明出处 MFC高级通用进度条-目录1 简介2 进度条实现基本原理3 使用方法3 .1 简单情况3.2 两个前后独立的进度条3.3 实际应用的一般情况3.4 带子进度条4 其他4.1 使用限制4.2 其他全局宏&#xff08;函数&#xff09;4.3 当前进度条设置1…

技术开发107

技术开发107 业务内容&#xff1a; 汽车音响等汽车电子部件试制、电子设备部件试制、精密钣金试制精密钣金试制 公司简介&#xff1a; 代表&#xff1a;中山尚美 成立时间&#xff1a;1950年6月 资本金&#xff1a;1000万日元 员工数&#xff1a;15名 资格认证&#xff…

数智为线,经纬中国:新华三勾勒出的山河锦绣

刺绣&#xff0c;是中华民族源远流长的技艺美术。早在《尚书》中&#xff0c;就记载了章服制度“衣画而裳绣”。而刺绣之美之所以能够传承千年&#xff0c;形成中国审美的一张名片&#xff0c;就是因为传统的染色技艺不够精细&#xff0c;颜色常常浮在布匹表面&#xff0c;但刺…

【卫朋】营销技能:营销4P之外,还有这些经典理论

一提到市场营销&#xff0c;很多人都可能会联想到经典的营销4P理论&#xff0c;但你可能不知道的是&#xff0c;4P理论只是“4字营销理论家族”中的一员。 市场营销“4字家族”中的4P、4R、4C理论构成了市场营销的基础部分。 它们诞生于特殊的环境和年代&#xff0c;为当时的企…

Redis原理篇—内存回收

Redis原理篇—内存回收 笔记整理自 b站_黑马程序员Redis入门到实战教程 内存过期策略-过期key处理 Redis 之所以性能强&#xff0c;最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能。 我们可以通过修改配置文件…

再学C语言16:表达式和语句

语句组成了C的基本程序的步骤&#xff0c;大多数语句由表达式构造而成 一、表达式 表达式&#xff08;expression&#xff09;由运算符和操作数组合构成 操作数是运算符操作的对象&#xff0c;可以是常量、变量或二者的组合 C的一个重要属性&#xff1a;每一个C表达式都有一…

Python 基础教程(1)——翻转字符串、集合运算、字符串、列表、元组、字典、数据类型转换、Python推导式、Python运算符、Python 数字类型转换、字符串

1.翻转字符串 def reverseWords(input):# 通过空格将字符串分隔符&#xff0c;把各个单词分隔为列表inputWords input.split(" ")# 翻转字符串# 假设列表 list [1,2,3,4], # list[0]1, list[1]2 &#xff0c;而 -1 表示最后一个元素 list[-1]4 ( 与 list[3]4 一样…

【C++进阶】特殊类设计

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…

vue书写一个uni-app小程序

在本次文章中我来大致向大家介绍一下如何使用Hbuilder X来编写一个uni-app的小程序的项目&#xff0c;在此我只说编写的方法与方向&#xff0c;具体的操作留给大家去亲自实操哦。 1.起步&#xff08;创建一个uni-app框架&#xff09;&#xff1a; 首先&#xff0c;我们需要把…

低代码破解了软件开发“不可能三角”?我做了个测评...

老读者知道&#xff0c;K哥写了10几年代码&#xff0c;后来转做技术管理&#xff0c;现在是上市公司的技术高管。在我们软件行业有一条铁律&#xff1a;长周期、大规模的软件研发过程当中&#xff0c;想要维持良好的运作&#xff0c;需要解决&#xff1a;成本、效能、质量。而且…

Doris-查询(三)

目录1、查询设置1.1、增大内存1.2、修改超时时间1.3、查询重试和高可用1.3.1 代码方式1.3.2 JDBC Connector1.3.3 ProxySQL 方式2、简单查询3、Join查询3.1 Broadcast Join3.2 Shuffle Join&#xff08;Partitioned Join&#xff09;3.3 Colocation Join3.3.1 原理3.3.2 使用3.…

数字孪生电力3D可视化管控平台

当前&#xff0c;新一轮科技革命和产业变革加速演进&#xff0c;物联网、大数据、云计算、人工智能、5G等新一代信息技术快速发展。在众多技术手段中&#xff0c;数字孪生技术以虚实结合为主&#xff0c;架起虚拟世界与现实世界之间沟通的桥梁&#xff0c;为人们提供了更加便捷…

分享5款可以录屏的软件,录屏幕视频软件,亲测好用

很多小伙伴都会使用电脑来作为自己办公、娱乐、学习生活的工具。在电脑上安装录屏软件&#xff0c;可以轻松的协助我们进行网课录制、会议录制、影剧片段录制等。网络上的录屏软件有很多&#xff0c;今天小编分享5款亲测好用的录屏软件&#xff0c;一起来看看吧。 可以录屏的软…

数据结构进阶 二叉搜索树

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍二叉搜索树并且模拟实现之 二叉搜索树二叉搜索树的概念节点类二叉搜索树类私有成员构造函数拷贝构造函数赋值运算符重载函数…