栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

这是26.删除有序数组中重复项 的加强版,允许每一个元素出现两次,其实思想都是一样的,具体可以去看我的这篇文章:26.删除有序数组中重复元素


给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成

来源:力扣(LeetCode)
链接


先判断特殊情况:当 nums.size() <= 2 时可以直接返回数组大小;

其它情况时,一开始我们先定义三个变量,L = 0, R = 1,K = 0,L 与 R 是两个指针,R是快指针用于遍历整个数组,而K 是出现元素次数的计数器。

当 nums[l] != nums[r] 时,我们可以直接令 :

nums[l] = nums[r] ,l++;

当nums[l] == nums[r] 时 ,我们先将 K++ ,然后判断一下,如果 K == 1,就代表此元素第二次出现 ,继续:

nums[l] = nums[r] ,l++;

否则什么也不做,直接让 R 继续移动。

除此之外,当 nums[l] != nums[r] ,我们 令 K = 0 ,来重新计数。


代码:

class Solution {
public:
    int removeDuplicates(vector& nums) {
    int len = nums.size();
    if(len <= 2)
    return len;
    int l = 0,r = 1,k = 0;
    for(l = 0,r = 1;r < len;r++)
    {
        if(nums[l] != nums[r])
        {
            k = 0;
            nums[++l] = nums[r];
        }
        else
        {
          k++;
          if(k == 1)
           nums[++l] = nums[r];
        } 
    }
    return l+1;
    }
};


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869968.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号