给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
由题意得,有序数列,所以重复的元素一定相邻,比较相邻元素
看了题解,第一次看到双指针,我的理解是,因为题设条件要求不另外占用内存,而slow那一项刚好是只从指针较小的下标改变的,不会影响到fast,并且只留下不重复项
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];
++slow;
}
++fast;
}
return slow;
}