✨博客主页:小钱编程成长记
博客专栏:数据结构练习题
相关博文:消失的数字 — 三种解法超详解

删除有序数组中的重复项

  • 1.题目
  • 2. 解题思路
  • 3. 具体代码
  • 总结

1.题目



力扣链接

2. 解题思路

1.非严格递增的数组:两个相邻元素相等或递增的数组
2. 因为要在原地删除重复的元素,所以不能再创建数组,以数组为跳板解决为题。
3. 我们可以用类似双指针的方法,创建两个下标src和dest,通过前后元素的对比,若不同,则将dest位置上的元素覆盖掉src后一个的重复的元素,++dest;相同时,++dest
4. 举例,如图:

》src 和 dest上的元素相同,++dest

》不同时将dest位置上的元素覆盖掉src后一个的重复的元素,++dest


》相同时,++dest

》不同时将dest位置上的元素覆盖掉src后一个的重复的元素,++dest

3. 具体代码

int removeDuplicates(int* nums, int numsSize){int dest = 1;//下标int src = 0;while (dest < numsSize) // 因为 MAX_dest + 1 == numsSize{if (nums[src] != nums[dest]){// ++src;// nums[src] = nums[dest];// ++dest;nums[++src] = nums[dest++];}else{++dest;}}return src + 1;}

总结

本篇文章我们解决了力扣上删除有序数组中的重复项这道题,感谢大家的阅读!大家一起进步!

点赞收藏加关注,C语言学习不迷路!