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;
    }
};
相关推荐
团子的二进制世界4 分钟前
G1垃圾收集器是如何工作的?
java·jvm·算法
吃杠碰小鸡8 分钟前
高中数学-数列-导数证明
前端·数学·算法
故事不长丨8 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
long3169 分钟前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
近津薪荼10 分钟前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
熊文豪19 分钟前
探索CANN ops-nn:高性能哈希算子技术解读
算法·哈希算法·cann
熊猫_豆豆35 分钟前
YOLOP车道检测
人工智能·python·算法
艾莉丝努力练剑1 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
偷吃的耗子1 小时前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
dazzle2 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习