0
点赞
收藏
分享

微信扫一扫

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

月孛星君 2022-02-27 阅读 72

目录

前言

题目

思路

起始位置:

第一次移动:

 之后移动:

代码实现


前言

小伙伴们大家好,之前为大家分析了一篇力扣上的第二十七题,删除数组中的等于 指定值 的题。

本文为大家带来第二篇顺序表相关的力扣题:删除有序数组中的重复项。

题目

如下图所示:

不同点:我们需要删除该有序数组中重复出现的元素,也就是如果某个元素出现2次以上,我们只需要留下一个即可,以及。然后思路基本就是一样了。

 注:

这两道题我们会用同样的思路实现,但是不代表这样的题只有这一种思路,因为我们的思路注定不会改变数组中元素原有的先后顺序,所以上图中红色框起来的部分对于本题C语言思路来说,是不需要的。也就是说有这条要求和没有是一样的。

思路

起始位置:

我们将 end 指向下标为 1 的位置,因为 begin 指向的是下标为 0 的位置。 然后des指向起始位置。如下图所示:

 

第一次移动:

如下图所示:

 之后移动:

之后的步骤就同第二步没有区别了,一直到最后:

 

此时,因为我们的循环只能进行到 end 小于 数组个数的时候,所以如果有最后一个单独出现的元素,那么我们是需要在循环结束之后,将最后一个值赋给 des ,然后 des 再后移返回 des 个元素(这个步骤是很容易出错的,所以小伙伴们一定要小心斟酌哦!)。

代码实现

力扣代码实现:

int removeDuplicates(int* nums, int numsSize) {
    int des=0;
    int begin=0;
    int end=1;
    for(end=1;end<numsSize;end++)
    {
      if(nums[begin]!=nums[end])
      {
        nums[des]=nums[begin];
        des++;
        begin=end;
      }
    }
    nums[des]=nums[begin];
    des++;
    return des;
}

好的,那么本文到此就结束啦!如有错误,还请指正呀!

举报

相关推荐

0 条评论