LeetCode80:Remove Duplicates

LeetCode 80

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

        int  k = 0, n;
        iter = number.begin();
        //vector<int>::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后,算法效率并不是最好的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值