Leetcode 26.删除有序数组中的重复项(利用双指针)

 我们先用力扣给的数组进行举例(上方为输入,下方为输出)那么我们可以看出,我们需要编写一个可以删除重复项的代码并且不打乱顺序,由此我们可以选择用双指针的方法来进行覆盖打印

过程

        首先我们定义两个变量src和dest用作数组nums的下标,不过我们只将dest赋值0,而src赋值为1,这样方便我们从第二个元素开始,和前一个元素相对比

         因为要删除重复项而不打乱顺序,所以我们需要dest接收不重复的值,而src负责对比,从第二个元素开始依次进行对比,如果重复了那么我们将src++一次,而如果没有重复,我们便可以将src的前一个值赋给dest,并且dest和src都++一次。

 

         当nums[src-1]的值等于4时,此时src就已经越界了,循环就会自动跳出,那么我们只能强行将src-1的值赋给dest(因为这里已经没有下一个值了,不管最后一个值是不是重复的,都一定是没有赋给dest的,所以我们可以直接将最后一个值赋给dest),最后我们返回一个++dest表示被删除后还有++dest个元素,结束我们的编程

 代码

int removeDuplicates(int* nums, int numsSize){
    int src = 1;
    int dest = 0;
    while(src < numsSize)
    {
        if(nums[src] == nums[src - 1])
    {
        src++;
    }
    else
    {
        nums[dest] = nums[src - 1];
        dest++;
        src++;
    }
    }
    if(nums[src - 1] == nums[numsSize - 1])
    {
        nums[dest++] = nums[src - 1];
    }
    return dest;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A.A呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值