当前位置: 首页 > article >正文

【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)

代码实现:

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:

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


http://www.kler.cn/a/427594.html

相关文章:

  • 目前国内【齿轮检测仪】行业整体较为分散,行业竞争日趋激烈
  • 斗地主之顺子(Java Python JS C++ C )
  • 《Java核心技术I》线程局部变量
  • python包之click
  • 使用xtrabackup对MySQL5.7数据库进行物理备份
  • 四个人排序——c++选择结构提高
  • 【调试工具】USB 转 UART 适配器(USB 转 TTL)
  • 华为 Mate 70 系列智能手机将运行不兼容 Android 的鸿蒙
  • 深入解析汽车对自行车手纵向成人碰撞测试(CBLA)
  • CSS3 动画详解,介绍、实现与应用场景详解
  • Alogrithm:老鼠走迷官(一)
  • uwsgi与Django结合的多线程多进程详解
  • 亚马逊云科技re:Invent:生成式AI的最新进展
  • 时序预测算法TimeXer代码解析
  • 《深度学习模型的应用与发展:从基础到前沿》
  • 【PID】温控、调速的应用
  • 设计模式c++(二)
  • 深入浅出 Go 语言:理解包管理
  • maven常用知识详解3:聚合与继承
  • 2024年9月GESPC++二级真题解析