leetcode刷题系列C++-Remove Duplicates From Sorted Array II

<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">Follow up for "Remove Duplicates":</span>
What if duplicates are allowed at most  twice?

For example,
Given sorted array nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1122 and 3. It doesn't matter what you leave beyond the new length.

Subscribe to see which companies asked this question

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int length = nums.size();
        if(length == 0 || length < 3)
            return length;
        int index = 1;
        for(int i = 2; i < length; ++i)
        {
            if(nums[i] != nums[index - 1])
                nums[++index] = nums[i];
        }
        return index + 1;
    }
};

去除重复次数超过两个的数字,同样也是一次遍历,O(n)复杂度,在原数组上操作,O(1)的复杂度

几个关键点:

 1.首先考虑当vector的大小较小时,是否能够直接满足条件,这种情况可以在程序头部直接给出。

 2.在遍历过程中,只需要考虑间隔一个后,前后数据是否重复,因为连续的挨着的数字是不会出现三个重复的,只有在出现三个数字的时候,才会出现是否有三个相同数字的情况,所以在遍历的过程中,只要不断保证前面的都是不超过两个重复的,后面的不断往前面进行验证,即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值