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

1. 题意

删除有序数组中的重复元素,同一元素不能超过两次。

2. 题解

leetcode26. 删除有序数组中的重复项的升级版本,只需要考虑 n u m s [ l e n − 2 ] ≠ n u m s [ j ] nums[len -2] \ne nums[j] nums[len−2]=nums[j]即可, l e n len len是排列好的有序数组长度, j j j遍历完整个数组。

  • 通解 k = 2 k=2 k=2
cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        
        int sz = nums.size();
        int j = 0;
        for (int num: nums) {
            if ( j < 2 || nums[j - 2] != num){
                nums[j] = num;
                j++;
            }
        }

        return j;
    }
};
  • 模拟
cpp 复制代码
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int sz = nums.size();
        int i = 0;
        int j = 1;
        int len = 0;
        if (sz <= 2)
            return sz;

        for (int j = 1;j < sz; j++) {
            if (nums[i] != nums[j]) {
                nums[len++] = nums[i];

                if (j == sz - 1) {
                    nums[len++] = nums[j];
                }
                i++;
            }
            else {
                nums[len] = nums[i];
                nums[len + 1] =nums[i];
                len += 2;
                j++;
                while (j < sz && nums[j] == nums[i])
                    j++;
                if (j + 1 < sz) {
                    i = j;
                }
                else if (j < sz) {
                    nums[len++] = nums[j];
                }
            }
        }
       


        return len;
    }
};
相关推荐
自动驾驶小卡30 分钟前
线性回归计算斜率原理及C++实现
c++·算法·回归·线性回归
拉一次撑死狗1 小时前
LeetCode数学相关算法题(1)【C语言版】
c语言·算法·leetcode·职场和发展
DexterYttt1 小时前
P5788 【模板】单调栈
数据结构·c++·算法·蓝桥杯
_周游2 小时前
【数据结构】_堆排序问题
数据结构·算法
CodeJourney.2 小时前
DeepSeek 关联 Word 使用教程:解锁办公新效率
数据库·人工智能·算法
马剑威(威哥爱编程)2 小时前
【推荐】爽,在 IDE 中做 LeetCode 题目的插件
ide·算法·leetcode
lucky_syq2 小时前
2025最新主流深度学习算法全解析
人工智能·深度学习·算法
艺杯羹3 小时前
二级C语言题解:迭代求根、字符串加法、字符串拆分
c语言·开发语言·数据结构·算法
tamak3 小时前
c/c++蓝桥杯经典编程题100道(19)质因数分解
c语言·数据结构·c++·算法·蓝桥杯
飞川撸码3 小时前
【LeetCode 热题100】74:搜索二维矩阵(二分、线性两种方式 详细解析)(Go 语言实现)
算法·leetcode·golang