LeetCode.80.删除有序数组中的重复项II

embedded/2024/9/23 11:17:55/

题目描述:
 

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

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

输入输出实例:

思路:这道题目就是让我们找每个数字有多少个,把超过两个的部分给删除。直观思路就是遍历数组然后删除超过两个的部分。对于这种我们可以选择从后往前遍历删除,因为从前往后遍历,遍历的过程中删除元素的话会影响后面的下标对于数字,从后往前遍历不会影响前面的下标。

我们从后往前遍历,使用一个变量用于存储当前数字有多少个,如果当前数字数量超过两个,那我们选择数组合适的一个子区间然后将这个子区间全部删除,只保留两个数字即可。最后返回删除完之后数组长度。

python">class Solution:def removeDuplicates(self, nums: List[int]) -> int:#从后往前遍历删除n = len(nums)num_i = n - 1#记录数量count = 1while num_i >= 0 :#找当前数字的数量while num_i > 0 and nums[num_i - 1] == nums[num_i] :num_i -= 1count += 1#只保留两个,从后往前删这样前面的i不会变化if count > 2 :#从num_i + count - 1到num_i + 1倒序删除for i in range(num_i + count - 1,num_i + 1,-1):nums.pop(i)count = 1num_i -= 1return len(nums)

 


http://www.ppmy.cn/embedded/97971.html

相关文章

【数据结构】队列的实现

0. 前言 上期博客给大家讲解了 栈 以及 栈的实现,今天再给大家讲一个特殊的顺序表结构,那就是队列! 下面就进入正题!一起学习一下吧! 1. 队列 1.1 队列的概念 队列:只允许在一端进行插入数据操作&…

全网最详细Linux安装openJDK教程

目录 前言:这看似很简单的jdk环境变量配置,但是里面很多坑,有些安装包可能是错误的,倒是环境变量配置正确,但是环境没生效。 1.找到正确的JDK版本 Index of /Adoptium/8/jdk/x64/linux/ | 清华大学开源软件镜像站 | T…

如何挑选高性价比蓝牙耳机?四款2024出众耳机品牌盘点推荐!

在数字化时代,蓝牙耳机已成为我们日常生活中不可或缺的一部分。无论是通勤路上、运动时,还是工作学习中,一款好的蓝牙耳机总能给我们带来极致的音乐体验。然而,面对市面上琳琅满目的产品,在预算有限的情况下如何挑选高…

Linux中nano编辑器详解

nano 是一个简单的文本编辑器,通常预装在大多数 Linux 发行版中。它非常适合初学者使用,因为它有一个用户友好的界面和易于理解的命令集。下面是对 nano 编辑器的详细说明。 启动 nano 要启动 nano 并打开一个文件进行编辑,你可以在终端中输…

【AI绘画】如何选择AI绘画工具?Midjourney VS Stable Diffusion

文章目录 💯如何选择合适的AI绘画工具个人需求选择比较工具特点社区和资源 💯 Midjourney VS Stable Diffusion:深度对比与剖析使用费用对比使用便捷性与系统兼容性对比开源与闭源对比图片质量对比上手难易对比学习资源对比作品版权问题产品定…

基于BlockingQueue的生产者消费者模型

文章目录 引言理解生产者消费者模型基于BlockingQueue的生产者消费者模型单生产,单消费模型多生产、多消费模型 引言 生产者消费者模型一般可以在超市中听到,例如如下是一个专门卖方便面的超市,这个超市有自己供应商,也有客户来买…

鸿蒙内核源码分析(寄存器篇) | 宇宙最忙存储器

寄存器的本质 寄存器从大一的计算机组成原理就开始听到它,感觉很神秘,如梦如雾多年.揭开本质后才发现,寄存器就是一个32位的存储空间,一个int变量而已,但它的厉害之处在于极高频率的使用,让人不敢相信是怎…

白酒品鉴的艺术:品味与感悟的很好结合

白酒,作为中国千年的文化瑰宝,其品鉴不仅是一种味觉上的享受,更是一种精神上的追求。在品鉴白酒的过程中,品味与感悟如同双翼,共同构筑起一场艺术与文化的盛宴。今天,我们就来探讨一下白酒品鉴的艺术&#…