题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
解题方法:双指针
令定义src和dest指针,让dest指向第一个元素,src指向第二个元素,让src和src-1比较,当src和src-1不相等时,将src-1赋值给dest
当src==src-1时,src++
当src!=src-1时,dest=src-1,dest++,src++
当src==src-1,一直都是src++
当src!=src-1时,dest=src-1,dest++,src++
当src==src-1时,src++
当src!=src-1时,dest=src-1,dest++,src++
当src==src-1时,src++
当src!=src-1时,dest=src-1,dest++,src++
当src==numsSize,循环结束,但是无论src与src-1是否相等,都需要将最后一个src赋值给dest,由于使用dest,所以dest还必须自增,但是src不用
PS:当src与src-1相等时的情况
此时,src已经越界,无论是否src与src-1,最后一个元素3都应该赋值过去,与上面src不等于src-1
代码如下:
//双指针解题
int removeDuplicates(int* nums, int numsSize) {
int dest = 0;
int src = 1;
while (src < numsSize)
{
//如果src等于src-1,则src一直往后走到与src-1不同,跳过区间里相同的元素
if (nums[src - 1] == nums[src])
{
src++;
}
//当src与src不相等时,把src-1给dest
else
{
nums[dest] = nums[src - 1];
dest++;
src++;
}
}
//最后一个元素与src-1无论是否相等都需要直接给dest
nums[dest] = nums[numsSize - 1];
dest++;
//返回长度
return dest;
}