LeetCode80:Remove Duplicates

LeetCode 80

class Solution {
public:
    int removeDuplicates(vector& nums) {
        //int nab= count(nums.begin(), nums.end(), nums[0]);
        int num;
        if (nums.size() % 2 == 0)   num = 0;
        else num = 1;
        vector number(nums);
        vector::iterator iter = unique(nums.begin(), nums.end());
        nums.erase(iter, nums.end());

        int  k = 0, n;
        iter = number.begin();
        //vector::iterator it=nums.begin();
        while (iter != number.end())
        {
            n = count(number.begin() + k, number.end(), number[k]);
            if (n >= 2) {
                nums.insert(nums.begin() + num, number[k]);
                num++;
            }
            num++;
            k+=n;
            iter += n;
        }

        return nums.size();
    }
};

其实看到这题的时候,我是懵逼的。
首先我考虑要不要遍历数组,然后记录每个元素个数,考虑到数组已排序,所以按顺序处理元素就可以了。当元素个数超过两个时,就删去多余的。
可后来当时实现的时候,查资料查着查着觉得容器类方法和算法类很好用啊。

经过数小时的debug,大致算法是这样的:首先,将vector复制到另一个临时数组,然后将源数组去重。接下来检测临时数组,使用count函数,当发现元素个数大于两个时,在源数组相应位置插入一个元素就可以了。

虽然我发现accept后,算法效率并不是最好的。

你可能感兴趣的:(LeetCode,C++)