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

news2025/3/12 0:56:10

题目描述:
 

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

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

输入输出实例:

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

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

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        #从后往前遍历删除
        n = len(nums)
        num_i = n - 1
        #记录数量
        count = 1
        while num_i >= 0 :
            #找当前数字的数量
            while num_i > 0 and nums[num_i - 1] == nums[num_i] :
                num_i -= 1
                count += 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 = 1
            num_i -= 1
        
        return len(nums)

 

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

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

相关文章

【MySQL-23】万字总结<InnoDB引擎>——【逻辑存储结果&架构(内存结构,磁盘结构,后台线程)&事务原理&MVCC】

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

【nginx】详细详细超详细,包括编译安装nginx+升级+回滚+核心配置+高级配置+反向代理+Nginx Rewrite相关功能等等

理论部分: 企业高性能Web服务器Nginx是一个开源的、高性能的HTTP和反向代理服务器,同时也支持IMAP/POP3/SMTP协议。它由俄罗斯人Igor Sysoev开发,并在2004年以BSD-like协议发布。Nginx因其卓越的性能、稳定性、丰富的功能集以及简单的配置而…

连锁美业门店收银系统怎么选?什么样的美业系统好用?美业管理系统源码分享

通过“PCiPAD手机APP微信小程序”的便捷功能操作, 提升预约服务、 会员管理、 收银管理、 库存管理、 客勤维护、员工管理、 排班管理等流程效率, 让门店员工的工作重心回归到服务质量上。 ▲ 小程序 ▲ 手机APP ▲ PC管理后台

Aseembly(九)-[BX] Loop

正如本篇文章的标题所示:本篇文章主要是进行 [BX] 和loop的讲解 上篇文章我们讲述了 关于 自己去dosbox里面编写汇编程序并且一步一步的编译(masm) 链接(link) 然后进行debug的过程 ,也进行了一个关于栈的实验: 详情请见我的上一篇文章 Aseembly(八)-汇编语言编写程序 让我们…

JavaScript class和正则

正则表达式练习 出生日期 年 月 日 ()表示一个整体 console.log(1909.match(^19\\d{2}$)); console.log(2024.match(^20(([01][0-9])|(2[0-4]))$)); //年 console.log(1909.match(^(19\\d{2})|(20(([01][0-9])|(2[0-4])))$)); // 月 console.log(12.match(^(0[1-9])|(1[0-2])…

minio版本升级与数据迁移操作记录

系列文章目录 minio单节点与集群安装 文章目录 系列文章目录前言一、问题引出二、升级与数据迁移步骤0.资源清单1.部署及启动新minio单实例2.设置新旧实例的别名3.检查旧实例bucket及存储的文件4.通过mc客户端命令进行数据迁移5.迁移结果验证 三、新旧实例minio数据对比 前言 …

利用Geohash算法,快速检索周边兴趣点

文章目录 一、前言二、基本原理三、Geohash算法四、算法存在的问题五、代码实现六、问题解决处理 一、前言 需要一个需求,查找某小区附近的超市,如果该小区和超市距离在500米以内,则查找成功。 实现该功能按照传统方式,需要获取小…

【秒杀系统架构图】

文章目录 高并发防止超卖和恶意请求定时同步商品用户秒杀的流程秒杀服务的关注点: 秒杀系统一般出现正在电商平台中,秒杀系统需要支持高并发,保持一致性和高可用的特点: 高性能。 秒杀涉及大量的并发读和并发写,因此支…

QT:事件机制

一、事件机制 qt的核心机制:对象树、信号和槽、事件机制 1.1概念 就是当这件事情发生时,自动执行对应的功能代码。该某块功能代码是虚函数,只需重写该虚函数,即可执行重写的代码。 1.2事件处理简介 1. 什么是事件? (重…

algorithm算法库学习之——堆操作,最小/最大操作,比较操作,排列操作

algorithm此头文件是算法库的一部分。本篇介绍堆操作,最小/最大操作,比较操作,排列操作。 接口API 堆操作 is_heap 检查给定范围是否为一个最大堆 (函数模板) is_heap_until (C11) 查找能成为最大堆的最大子范围 (函数模板) make_heap 从一…

SQL 时间盲注 (injection 第十六关)

简介 SQL注入(SQL Injection)是一种常见的网络攻击方式,通过向SQL查询中插入恶意的SQL代码,攻击者可以操控数据库,SQL注入是一种代码注入攻击,其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&#x…

C:每日一题:双指针法的使用

前言: 思虑再三,觉得如果有时间每日一题还是可以更新一下的。 题目难度:基础 解题方法:双指针法 一、题目 输入一个整数数组, 实现一个函数来调整该数组中数字的顺序使得 数组中所有的奇数位于数组的前半部分&a…

数字人的形象克隆与语音克隆是伪需求

形象克隆与语音克隆技术,在当前的环境上已经可以成熟的实现,但真的解决了痛点问题吗? 普通人或者一般的公司克隆自己内部人的形象有必要吗?对外界而言,克隆的形象与虚拟的形象并无二致,本身并没有什么知名…

Arduino自制手持小风扇项目

1.1 介绍: 实验功能说明:功能(1)按一下按键小风扇开启,再按一下关闭。 功能(2)按一下按键小风扇一档风速,再按一下二挡,依次三挡…关闭。 按键模块说明:按下…

【自动化测试必学语言】python:模块和包

目录 导入模块的语法 方式一 方式二 方式三 【了解】 基本不用 模块的查找顺序 __name__ 的作用 代码练习 包(package) Python 源代码文件就是⼀个模块模块中定义的变量函数类,都可以让别人使用,同样,可以使用别人定义的&#xff08…

进程(2) wait、exec函数族

目录 1. fork() 函数 功能 使用时注意事项 2. exit() 函数 功能 使用时注意事项 3. wait() 函数 功能 使用时注意事项 总结 wait() 异常信号结束 waitpid exec函数族 execl() execlp() execv execvp fork()、exit() 和 wait() 函数在进程管理中扮演着重要的角…

【C语言】【Linux】如何在Linux终端中进行彩色输出——C语言篇

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:C语言编程&…

双亲委派机制的优势与劣势

三次双亲委派机制的破坏

24 优化算法

目录 优化和深度学习深度学习中的挑战局部最小 vs 全局最小鞍点(saddle point)梯度消失小结凸性(convexity)凸集凸函数(convex function)凸函数优化凸和非凸例子小结梯度下降(gradient descent)1、梯度下降算法是最简单的迭代求解算法2、学习率(learning rate)小结随…

Unity小功能 - 贴墙滑行

目录 一. 简介 二. 创建项目 1.新建地板 2.创建墙体 3.创建主角 三. 编写代码 四. 效果演示 五. 总结 一. 简介 贴墙滑行是在游戏中常见的一种角色动作表现,它能够增加游戏的真实感和趣味性,同时也为游戏玩法带来更多的可能性。 在 Unity 中实…