LeetCode_Array_80. Remove Duplicates from Sorted Array II (C++)

目录

1,题目描述

2,思路

3,代码

4,测试效果


1,题目描述

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,1,2,3,3],

Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively.

It doesn't matter what values are set beyond the returned length.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

数组已按升序排序,原地操作数组,使数组中的元素重复不超过两次,并返回新数组长度;

 

2,思路

快慢指针;

数组元素数小于等于2时,不会有移位,故直接返回nums.size()即可;

初始时slow=1,fast=2;

若nums[fast] == nums[slow-1]即有连续三个元素相等,则low不变,fast向前;

若nums[fast] != nums[slow-1],slow加一,nums[slow] = nums[fast]

示例一:

实例二:

示例三:

3,代码

可通用(max=1,2,3,4...,分别表示元素最多重复1,2,3,4...次)

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() <= 2) return nums.size();//元素数目小于等于2个时不会出现移位

        int fast = 2;
        int slow = 1;
        int max = 2;
        for(; fast<nums.size(); fast++) {
            if(nums[fast] != nums[slow-max+1]) {
                slow++;
                nums[slow] = nums[fast];
            }
        }   
        return slow+1;
    }
};

 

4,测试效果

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值