思路提示: 首先,我们知道数组nums是有序的,而且我们只能在原地修改nums数组,不能创建新的数组空间来存储删除重复出现的元素后的结果。我们需要一边遍历数组查找相同元素,一边在对比发现不同元素时修改数组元素,那么我们可以考虑双指针法的快慢指针了,定义slow和fast作为指针,初始化时指针slow指向数组的起始位置(nums[0]),指针fast指向指针slow的后一个位置(nums[1])。随着指针fast不断向后移动,将指针fast指向的元素与指针slow指向的元素进行比较:
如果nums[fast] ≠ nums[slow],那么nums[slow + 1] = nums[fast];
如果nums[fast] = nums[slow],那么指针fast继续向后查找;
int removeDuplicates(int* nums, int numsSize){
if(numsSize == 0){return 0;}
int slow = 0, fast = 1;
while(fast < numsSize){
if(nums[fast] != nums[slow]){
slow = slow + 1;
nums[slow] = nums[fast];
}
fast = fast + 1;
}
return slow + 1;
}