力扣,26. 删除有序数组中的重复项

题目链接:

26. 删除有序数组中的重复项

        这个题相比较第27题,难度会更难一些,第27题是让我们删除数组中的指定元素,而这个题则是让我们删除数组中的重复项。由于重复项有很多个,所以思路也会不一样。

        这个题的套路也是双指针,一个left,一个right。left用来控制交换的项和返回修改后的数组长度,而right指针则是负责遍历数组。这个题最关键的一点是交换的判定,因为有很多重复项,所以我们需要找的是前后不一致的项。因为涉及到前后的问题,我们可以给left和right赋值给1,让right和right-1去负责找不一致的项的任务。当nums[right] != nums[right-1]的时候,当前的nums[right]就和nums[left]进行交换,然后left指针增加1,而right指针是负责遍历数组的,在循环的结尾的时候负责增加1即可。

        当这样遍历结束之后,nums中的0到left-1的元素都不相同,然后返回left,就是修改后的数组长度。

代码如下:

int removeDuplicates(int* nums, int numsSize){
    if(numsSize == 0)
    {
        return 0;
    }
    int left = 1;
    int right = 1;
    while(right < numsSize)
    {
        if(nums[right] != nums[right-1])
        {
            nums[left] = nums[right];
            left++;
        }
        right++;
    }
    return left;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值