目录
前言
小伙伴们大家好,之前为大家分析了一篇力扣上的第二十七题,删除数组中的等于 指定值 的题。
本文为大家带来第二篇顺序表相关的力扣题:删除有序数组中的重复项。
题目
如下图所示:
不同点:我们需要删除该有序数组中重复出现的元素,也就是如果某个元素出现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;
}
好的,那么本文到此就结束啦!如有错误,还请指正呀!