【leetcode】26-删除排序数组中的重复项【C++】

题目如下:

解题思路:

遍历数组,跳过重复元素,设置一个计数器 flag 记录非重复元素。注意处理数组访问的边界情况。

代码如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int length = nums.size();
        if(length == 0) //数组为空直接返回
            return 0;
        int flag = 0; //计数器,记录非重复元素
        for(int i = 1; i < length; i++){
            //跳过重复元素
            while(nums[i] == nums[flag]){ 
                if(i < length - 1) //数组边界情况处理,避免数组访问越界
                    i++;
                else //最后几位元素全部相同,避免数组越界,例如{1、1、1、1}
                    break;
            }
            //记录非重复元素
            if(nums[i] != nums[flag]){ //判断是为了例如{1、1、1、1}等最后几位元素相同情况的特殊处理
                flag++;
                nums[flag] = nums[i];
            }
        }
        return (flag + 1);
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值