数组题——删除排序数组中的重复项

删除排序数组中的重复项

先修知识

  1. 迭代器的变量定义:auto i=vector.begin();使用auto来自动分配变量类型;
  2. 删除容器中的元素erase():vector.erase(iterator);这里是删除迭代器iterator指定的元素,iterator不能为end(),必须是真实元素。vector.erase(iterator1,iterator2);这是删除迭代器iterator1、iterator2之间的元素。

题目描述

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。如:[1,1,2],返回2,输出[1,2]

解题思路

因为是排序数组,所以只需要比较相邻元素,如果相同那么删去该元素。这道题的关键是边界问题,有起始和终止条件要特别注意确认。

这个是以容器第一个元素开始auto i=nums.begin(),和后一个元素(*(i)==*(i+1))相比,相同:删去,不同:迭代器后移判断下一元素。那么终止条件应为end()-1;

class Solution {
public:
    int removeDuplicates(vector<int>& nums) 
    {
        
        if(nums.size())
        {
            auto i=nums.begin();
            while(i!=nums.end()-1)
            {
                if(*(i)==*(i+1))
                    nums.erase(i);
                else
                    i++;
            }
        }
        return nums.size();
    }
};

如果:是以容器的第2个元素开始auto i=nums.begin()+1,和前一个元素(*(i)==*(i-1))相比,相同:删去,不同:迭代器后移判断下一元素。那么终止条件应为end();

class Solution {
public:
    int removeDuplicates(vector<int>& nums) 
    {
        
        if(nums.size())
        {
            auto i=nums.begin()+1;
            while(i!=nums.end())
            {
                if(*(i)==*(i-1))
                    nums.erase(i);
                else
                    i++;
            }
        }
        return nums.size();
    }
};

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值