
leetcode笔记总结——(4)删除有序数组中的重复项(python和C++实现)
初始化两个指针 将 遍历数组,使用 当且仅当当前元素与上一个应该保留的元素相同时,当前元素不应该被保留(因为此时可能存在三个连续的相同元素)。 使用
发布日期:2021-05-15 00:34:12
浏览次数:26
分类:精选文章
本文共 1249 字,大约阅读时间需要 4 分钟。
题目描述
给定一个有序数组,其中每个元素可以重复多次,但要确保相同的元素最多只能连续出现两次。本题要求通过双指针方法高效地解决这个问题。
思路
由于数组是有序的,相同的元素必然是连续的。因此,我们可以利用双指针的方法来遍历数组,检查每个元素是否需要被保留。如果不需要被保留,则跳过当前元素;如果需要被保留,则将当前元素移动到指定位置。
具体步骤如下:
slow
和 fast
,分别用于记录处理后的数组长度和当前位置。slow
和 fast
初始化为 2,因为前两个元素必然可以保留。fast
指针逐步检查每个元素。slow
进行位置调整,最终返回 slow
即为处理后的数组长度。代码实现
Python 实现
class Solution: def removeDuplicates(self, nums: list) -> int: n = len(nums) if n <= 2: return n slow = fast = 2 while fast < n: if nums[slow - 2] != nums[fast]: nums[slow] = nums[fast] slow += 1 fast += 1 return slow
C++ 实现
class Solution {public: int removeDuplicates(std::vector nums) { int n = nums.size(); if (n <= 2) { return n; } int slow = 2, fast = 2; while (fast < n) { if (nums[slow - 2] != nums[fast]) { nums[slow] = nums[fast]; slow++; } fast++; } return slow; }};
总结
本题利用双指针法结合数组有序性,高效地解决了重复元素的问题。这种方法的核心思想是遍历数组,确保每个元素最多保留两次。对于长度不超过 2 的数组,无需任何处理。这种方法时间复杂度为 O(n),空间复杂度为 O(1),具有较高的效率。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月13日 01时11分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
BUU-MISC-认真你就输了
2019-03-09
BUU-MISC-caesar
2019-03-09
【专题2:电子工程师 之 上位机】 之 【36.事件重载】
2019-03-09
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
2019-03-09
一文理解设计模式--命令模式(Command)
2019-03-09
VTK:可视化之RandomProbe
2019-03-09
block多队列分析 - 2. block多队列的初始化
2019-03-09
Java时间
2019-03-09
不编译只打包system或者vendor image命令
2019-03-09
The wxWindows Library Licence (WXwindows)
2019-03-09
leetcode——第203题——虚拟头结点
2019-03-09
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
2019-03-09
MySQL----基础及常用命令
2019-03-09
flink启动(二)
2019-03-09
前端开发进阶手册.pdf
2019-03-09
软件架构设计和MESH经验之谈
2019-03-09
关于宝塔面板安装的mysql用Navicat连接出现2003的错误解决
2019-03-09
Windows2016 FTP用户隔离
2019-03-09
js传入参数是中文的时候出现 “******”未定义错误
2019-03-09