美文网首页程序员
80. Remove Duplicates from Sorte

80. Remove Duplicates from Sorte

作者: Nautilus1 | 来源:发表于2017-10-17 09:48 被阅读0次

题目描述:与26题不同的是每个数字最多允许出现两次,同样返回处理后的长度。

分析:同样因为已排好序,所以出现次数是否大于两次可用A[i] == A[i - 2]来判断。复杂度也同样是O(n), O(1)。

代码

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() <= 2)
            return nums.size();
        int k = 2;
        for (int i = 2; i < nums.size(); i ++)
        {   //注意此处是k -2而不是i - 2。因为此时i - 2处可能已经改了值。例如[1,1,1,2,2],第一次去重时k = 2,使A[2] = 2,然后i = 4时发现A[i] == A[i - 2]略过了。事实上一直在保持k记录的是前面所有不同元素最多出现两次的总次数。
            if (nums[i] != nums[k - 2])
                nums[k ++] = nums[i];
        }
        return k;
    }
};

相关文章

网友评论

    本文标题:80. Remove Duplicates from Sorte

    本文链接:https://www.haomeiwen.com/subject/esmruxtx.html