1.删除排序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
思路:
既然是原地进行,则至少需要两个指针,一个快指针(right),一个慢指针(left)。快指针负责找下一个不相等的元素坐标,慢指针负责定位替换的位置。
最开始两个指针一前一后,比较大小。当相等时,说明快指针所指元素不能保留,快指针向前移动一个,慢指针不动;当不相等时,说明快指针所指元素需要保留,则慢指针向前移动一个,将快指针所指的值赋值给慢指针,接着快指针向前移动一个......直至快指针遍历整个数组。
易错点:
(1)返回值:返回的是数组的长度而不是原数组。(刚开始没注意,直接return nums;)
(2) 数组长度和坐标下标的关系:注意返回的是left+1,而不是left!!!(因为left是最后元素的下标)
代码如下:
int removeDuplicates(int* nums, int numsSize){
if(numsSize<=1){
return numsSize;
}
int left = 0;
int right = 1;
while(right<numsSize){
if(nums[right]!=nums[left]){
left++;
nums[left] = nums[right];
}
right++;
}
return left+1;
}
ps:真是菜,就这一道题写了一个小时(痛哭!)