删除有序数组中的重复项
注:本题所采用的方法是建立在移除元素的基础之上的,如果大家对双指针的方法不大了解,或者不会做《移除元素》这一题,建议先去看看👉传送门
具体步骤
- 定义两个指针
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; }