思路:
1.数组已经排好序,不允许使用额外空间,只能O(1)空间复杂度
2.数组删除不能单个操作,需要移动该元素后面所有元素。
3.使用双指针,慢指针指向不重复的元素的后一位,快指针遍历整个数组搜索新的元素。
4.当快指针到达数组末尾时,慢指针指向的索引位置即新的不重复数组的长度。
优化点:当遇到不重复数组时,代码会执行无效的赋值,
加一个判断(fast-slow>0),即指向同一个位置时,不进行操作。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size()==0)
return 0;
else{
int fast=1;
int slow=1;
int length=nums.size();
while (fast<length){
if(nums[fast]!=nums[fast-1]){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
}
};