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


你可能感兴趣的:(leetcode刷题系列C++-Remove Duplicates From Sorted Array II)