我们先用力扣给的数组进行举例(上方为输入,下方为输出)那么我们可以看出,我们需要编写一个可以删除重复项的代码并且不打乱顺序,由此我们可以选择用双指针的方法来进行覆盖打印
过程
首先我们定义两个变量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;
}