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

题目链接:

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

题目描述:

解题思路:

按照题目中要求,必须在原来数组中进行修改,并且在O(1)额外空间条件下完成。因此我们可以使用双指针算法,算法具体流程如下:

  • 如果数组长度 nums.size() <= 2, 则直接 return nums.size()即可
  • 定义两个指针 slowfast,并初始化为2
  • 如果 nums[slow - 2] == nums[fast],说明已经有两个数相等,因此 nums[fast] 数值不能放进结果之中。反之,如果nums[slow - 2] != nums[fast],那么nums[fast]可以放进nums[slow]中,并且slow++,记录结果的长度
  • fast>=nums.size()的时候,结束循环,返回数组长度slow

复杂度分析:

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

代码实现:

cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if(n<=2){
            return n;
        }
        int slow = 2;
        int fast = 2;

        while(fast<n){
            if(nums[slow-2] != nums[fast]){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
};

进一步可以优化掉快指针fast:

cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {

        int slow = 0;
        for(int num : nums){
            if(slow<2 ||  nums[slow-2] < num){
                nums[slow] = num;
                slow++;
            }
        }

        return slow;
    }
};

解题思路参考:
https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/solutions/702869/ju-yi-fan-er-ni-zhen-de-zhen-de-zhi-de-x-eicz/?envType=study-plan-v2&envId=top-interview-150

相关推荐
Dovis(誓平步青云)10 分钟前
【数据结构】排序算法(中篇)·处理大数据的精妙
c语言·数据结构·算法·排序算法·学习方法
新知图书10 分钟前
OpenCV单窗口显示多图片
人工智能·opencv·计算机视觉
荷包蛋蛋怪12 分钟前
【北京化工大学】 神经网络与深度学习 实验6 MATAR图像分类
人工智能·深度学习·神经网络·opencv·机器学习·计算机视觉·分类
小马哥编程14 分钟前
【软测】AI助力测试用例
人工智能·测试用例
2401_8729450916 分钟前
【补题】Xi‘an Invitational 2023 E. Merge the Rectangles
算法
高 朗23 分钟前
2025高频面试设计模型总结篇
设计模式·面试·职场和发展
与火星的孩子对话24 分钟前
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
人工智能·unity·c#·游戏引擎·语音识别·宠物
暮雨哀尘29 分钟前
微信小程序开发:开发实践
开发语言·算法·微信小程序·小程序·notepad++·性能·技术选型
事变天下30 分钟前
今是科技发布全新测序仪G-seq1M:以效率与精准引领基因测序新标杆
人工智能·科技
贤小二AI34 分钟前
贤小二c#版Yolov5 yolov8 yolov10 yolov11自动标注工具 + 免python环境 GPU一键训练包
人工智能·深度学习·yolo