
int removeDuplicates(int* nums, int numsSize) {
if(numsSize==0) return 0;
int fast=1,slow=1;
while(fast<numsSize){
if(nums[fast]!=nums[fast-1]){
nums[slow++]=nums[fast];
}
fast++;
}
return slow;
}
核心思路:双指针法
- 指针定义
fast:快指针 ,遍历原数组,负责寻找不重复的新元素。slow:慢指针 ,指向新数组(无重复)的下一个待填充位置。
- 核心逻辑 因为数组是非严格递增 的,重复元素一定相邻 ,所以只需比较
nums[fast]和nums[fast-1]:- 若两者不相等 :说明找到新的不重复元素,将其赋值到
nums[slow],并让slow后移。 - 若两者相等 :说明是重复元素,直接跳过,仅让
fast后移。
- 若两者不相等 :说明找到新的不重复元素,将其赋值到
- 结果 遍历结束后,
slow的值就是去重后数组的长度 ,且数组前slow个元素为去重后的结果。