​LeetCode刷题实战80:删除排序数组中的重复项 II

强化学习(Reinforcement Learning)与动态系统控制方法 一个具体的 RBC 的例子是自动驾驶汽车中的交通规则。在训练过程中,代理通过与环境交互获取奖励信号,并学习如何在某个状态下采取最佳的行动,以最大化长期的累积奖励。在化工过程中,通过对生产过程中的温度、压力、流量等参数的控制来实现产品的质量和产量的提高。需要注意的是,以上代码只是一个简单的示例,实际的 MPC 系统可能会更加复杂,并包含更多的模型预测和控制算法来实现更复杂的控制任务。需要注意的是,以上代码只是一个简单的示例,实际的自动驾驶汽车系统可能会更加复杂,并包含更多的规则和条件来确保安全行驶。 阅读详情

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 删除排序数组中的重复项 II,我们先来看题面:

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array; you must do this by modifying the input array in-place with O(1) extra memory.

题意

给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

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

样例

示例 1:

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

示例 2:

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

解题

https://www.cnblogs.com/techflow/p/13186342.html

题解

删除重复的元素本身并不复杂,唯一麻烦的是我们怎么在不引入额外存储的情况下完成这一点。如果你能抓住数组是有序的这一点,应该很容易想通:既然数组是有序的,那么相同的元素必然排在一起。

既然相同的元素排在一起,那么我们可以利用一个变量存储当前元素出现的次数。如果遇到不同的元素,则将次数置为1。这样我们就可以判断出究竟哪些元素需要删除,哪些元素需要保留了。

但是这就又引入了另外一个问题,我们怎么来删除这些重复的元素呢?因为我们不能引入额外的数组,需要在当前数组上完成。我们可以先假设没有这个限制,我们会怎么做?

new_nums = []
cur = None
for i in range(n):
    if cur == nums[i]:
        count += 1
 else:
        count = 1
        cur = nums[i]
    if count > 2:
        continue
    new_nums.append(nums[i])

由于有这个限制,所以我们要做的就是把new_nums这个数组去掉,其实去掉是很简单的,因为我们可以让nums这个数组自己覆盖自己。因为产出的数据的数量一定是小于等于数组长度的,所以不会出现数组越界的问题。我们只需要维护一个下标记录nums数组当中允许覆盖的位置即可。

这个也是非常常见的做法,我们在之前的题目当中也曾经见到过。

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        # start是起始覆盖指针,指向第一个可以覆盖的位置
        start, cur, cnt = 0, None, 0
        n = len(nums)
        if n == 0:
            return 0
        for i in range(n):
            if cur == nums[i]:
                cnt += 1
            else:
                cnt = 1
                cur = nums[i]
            # 如果数量超过2,说明当前元素应该舍弃,则continue
            if cnt > 2:
                continue
            # 否则用当前元素覆盖start位置,并且start移动一位
            else:
                nums[start] = nums[i]
                start += 1
        return start

关于这段代码,还有一个简化版本,我们可以把cnt变量也省略掉。因为元素是有序的,我们可以直接用nums[i]和nums[i-2]进行判断,如果相等,那么说明重复的元素一定超过了两个,当前元素需要跳过。

简化之后的代码如下:

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        i = 0
        for n in nums:
            if i < 2 or n != nums[i - 2]:
                nums[i] = n
                i += 1
        return i

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。

上期推文:

LeetCode40-60题汇总,速度收藏!

LeetCode刷题实战61:旋转链表

LeetCode刷题实战62:不同路径

LeetCode刷题实战63:不同路径 II

LeetCode刷题实战64:最小路径和

LeetCode刷题实战66:加一

LeetCode刷题实战67:二进制求和

LeetCode刷题实战68:文本左右对齐

LeetCode刷题实战69:x 的平方根

LeetCode刷题实战70:爬楼梯

LeetCode刷题实战71:简化路径

LeetCode刷题实战72:编辑距离

LeetCode刷题实战73:矩阵置零

LeetCode刷题实战74:搜索二维矩阵

LeetCode刷题实战75:颜色分类

LeetCode刷题实战76:最小覆盖子串

LeetCode刷题实战77:组合

LeetCode刷题实战78:子集

LeetCode刷题实战79:单词搜索

一篇文章带你快速入门 MATLAB 文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一 阅读详情

相关推荐

Sylvester结式法求解多项式方程

Sylvester结式法,结式,消元法,ctfshow 七夕杯 LUCK7,crypto,WriteUp

u010883831的博客 4532

字节 6 面面爆炸了,网友:字节这是要招超人吗。。

这题说的是在一个有序数组中如果有重复的元素,删除重复的,使重复的元素不超过两个,这题和前面讲的《删除有序数组中的重复项》一样,前面一道题如果有重复的,只能保留一个,但这里最多保留两个。:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。给你一个有序数组 nums ,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。--------------下面是今天的算法题--------------

IT界那些事儿 159

基于集成运放心电放大器设计(原创)

原创作者:einyboy or alert 最近在看美剧《危机边缘》关于边缘科学的案件,科技控可以看一下,但建议不在吃东西的时候看。想像力是创造的思想源头,动手能力则是创造的车床。 自认为是没有想像力的那类,只能发挥动手能力了。 心电测量简介 图1 心电极接线图 如图1心电测试一般使用3个心电极进行测量,各个电极的说明如下: RA: Right Arm缩写,右手电极 LA: L...

huandaohack的专栏 6924

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

Remove Duplicates from Sorted Array II ​ Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length. ​ Do not allocate extra space for another array; you must do this by modifying the inp

小王同学的博客 379

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

YOLOv11【第一章:零基础入门篇·第1节】YOLOv11核心架构深度解析与环境配置,一文搞定!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。 本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5508

力扣算法之移除重复元素

源自力扣题解官网 ,力扣面试经典150题 第三题,移除重复元素 (C版)

A_Ashely的博客 612

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

LeetCode题解(1410):HTML特殊字符实体解析器(Python)

题目:原题链接(中等) 标签:字符串 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 140ms (49.70%) Ans 2 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 56ms (98.82%) Ans 3 (Python) LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。 解法一(字符串检索替换):

长行 528

092、多sensor帧同步在环视系统中的实现——基于瑞芯微RK3588的PPS同步与曝光同步方案

摘要: 本文探讨了瑞芯微RK3588平台在360环视系统中实现多摄像头帧同步的技术方案。针对环视拼接常见的动态场景错位问题,提出了PPS同步与曝光同步相结合的解决方案。通过GPIO硬件触发实现四路摄像头同步曝光,配合I2C全局曝光控制,将时间误差控制在0.5ms内。文章详细解析了RK3588设备树配置、内核驱动实现中的关键细节,包括同步信号处理、寄存器原子写入等核心技术点,并分享了量产中遇到的温度漂移、信号完整性等实际问题及解决方法。最终通过硬件整形和电源优化,将同步抖动控制在±5μs以内,有效解决了动态拼

zzfmlxs的博客 33

Python-自动化绘制股票价格通道线

创建更强大、更可靠的价格通道检测算法。

探索人工智能领域 948

怎么用html语言实现框架,HTML代码怎么用?HTML基础教程

在弄清“HTML代码怎么用”之前,我们要首先明白HTML是用来描述网页的语言,它不是一种编程语言,而是一种 使用标记标签来描述网页的标记语言。本篇基础教程主要内容包括:HTML常用代码、网页基本框架和网页组成要素。一、HTML常用代码网页的描述,关键字,作者及其他元素:meta name="" content=""客户端脚本:window.alert('');文档的样式信息:引进图片:img sr...

weixin_34957720的博客 600

通过采用下面方法检查内容,还是系统无法更新下载,但是错误代码变成了——下载错误 - 0x80004002-到底如何解决?必须重装系统吗?-这个到底是系统问题,还是硬件问题?

‌。

qq_15963745的博客 335

8086怎么输出数组_LeetCode刷题实战80:删除排序数组中的重复项 II

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做删除排序数组中的重复项 II,我们先来看题面:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-arr...

weixin_39670441的博客 66

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

html从多选框中传出int数组_LeetCode刷题实战80:删除排序数组中的重复项 II

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做删除排序数组中的重复项 II,我们先来看题面:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-arr...

weixin_39619478的博客 69

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode第80题_删除有序数组中的重复项II

给你一个有序数组nums,请你删除重复出现的元素,使得每个元素,返回删除后数组的新长度。不要使用额外的数组空间,你必须在修改输入数组并在使用 O(1) 额外空间的条件下完成。

qq_40263592的博客 1999

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】

力扣80题 多种算法详解

10年数据\经营分析经验,现任大厂数据分析负责人 2304

leetcode80.删除排序数组中的重复项 II

leetcode80.删除排序数组中的重复项 II 题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1...

EngineerHe的博客 1550

Leetcode-80 删除排序数组中的重复项 II(最详细解答)

Leetcode-80 删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, ...

IT荻的博客 1852

力扣80——删除排序数组中的重复项 II

原题 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 你不需要考虑数组中超出新长度...

death05的博客 1014

leetcode#80.删除排序数组中的重复项II

leetcode80 删除排序数组中的重复项ii

AuthurLEE's Blogs 1898

LeetCode 79单词搜索&80删除排序数组中的重复项Ⅱ&81.搜索旋转排序数组Ⅱ

LeetCode79.单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCCED", 返回 true 给定 word = "SEE", 返回 true 给定 word

bigsai 3309

Leetcode题解: 80 删除排序数组中的重复项 II

Leetcode:80 删除排序数组中的重复项 II1 题目描述2 算法代码1 python3版本2 c++版本3 java版本3 思路整理 1 题目描述 题目难度:middle 题目描述如下: 2 算法代码 1 python3版本 class Solution(object): def removeDuplicates(self, nums): """ ...

xueping_wu的博客 348

vue删除数组中的一条数据_删除排序数组中的重复项 II

删除排序数组中的重复项 II题目给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。(来源LeetCode 80)例子示例1输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]示例2输...

weixin_39588983的博客 5427

Leetcode80. 删除排序数组中的重复项 II

Leetcode80. 删除排序数组中的重复项 II 题目: 相似题目:Leetcode26. 删除排序数组中的重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 len...

会流泪de鱼的博客 380

LeetCode80:删除排序数组中的重复项II

LeetCode80:删除排序数组中的重复项II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 你不需要考虑数组中超出新长度后面的元素。 示例2: 给定 nums = [0,..

u011485472的博客 791
上一篇: 21张图揭秘在阿里、腾讯、美团工作的区别
下一篇: 为防止员工带薪拉屎,快手公司推出“计时厕所”!官方称只是为了测试!
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值