题目描述
26.删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 你不需要考虑数组中超出新长度后面的元素。
示例1:
输入:nums = [1,1,2]
输出:2,[1,2]
示例2:
输入:nums =[0,0,1,1,1,2,2,3,3,4]
输出:5,[0,1,2,3,4]
题解
要删除排序数组中的重复项,我们可以考虑用双指针法。
初始情况
①先比较 nums[slow]和 nums[fast] 的值,如果相等那么fast指针就往后走
②如果不相等,则 slow指针向后走一个,并将 nums[fast] 的值赋给 nums[slow]
③重复①②,直到 fast 走到numSize位置,结束
极限情况
情况1:
输入:nums = [1,1,1]
输出:1,[1]
情况2:
输入:nums = [1,2,2]
输出:2,[1,2]
情况3:
输入:nums = [ ]
输出:0,[ ]
解决方案详见代码
题解代码
int removeDuplicates(int* nums, int numsSize){
//情况3的解决
if(numsSize==0){
return 0;
}
//定义快慢指针
int slow = 0,fast = 1;
//情况1,2均能通过
//当 fast 走到numSize位置,结束
while(fast < numsSize){
//相等那么fast指针就往后走
if(nums[slow]==nums[fast]){
++fast;
}
//如果不相等,则 slow指针向后走一个,并将 nums[fast] 的值赋给 nums[slow]
else{
nums[++slow] = nums[fast];
}
}
return slow+1;
}