删除有序数组中的重复项
题目链接
注:本题所采用的方法是建立在移除元素的基础之上的,如果大家对双指针的方法不大了解,或者不会做《移除元素》这一题,建议先去看看👉传送门
具体步骤
- 定义两个指针
slow
和fast
,slow
指向数组的第一个元素,fast
指向数组的第二个元素 fast
开始向后遍历数组,如果其值等于slow
所指向的元素,那么则说明出现重复元素,fast
继续向后移动- 如果
fast
所指向的元素不等于slow
的,那么进行操作[++slow] = [fast++]
,即先让slow
向后移动一位再进行赋值操作,接着fast
继续后移 - 直到
fast
遍历完整个数组
如图所示:
实现代码
int removeDuplicates(int* nums, int numsSize){
int slow = 0;
int fast = 1;
while(fast < numsSize)
{
//相等就不赋值,fast继续遍历
if(nums[fast] == nums[slow])
fast++;
//不相等就赋值
else
nums[++slow] = nums[fast++];
}
//返回新数组大小
return slow + 1;
}