删除排序数组中的重复项
题目
我们先来看一下这个题目要求,输入一个数组,输入数组是以引用方式传递的,在函数里修改数组对于调用者是可见的。题目要求常数级别的空间复杂度,这时候首先想到指针,而且需要双指针。
由于数组是有序的,第一个指针指向第一个元素,第二个指针指向第二个元素。第二个指针进行遍历,当第二个指针指向的元素大于第一个指针指向的元素时,第一个指针向后指一位。直到for循环完成。
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==0) return 0;
int i=0; //i做指针,记录需要替换元素的位置
for(int k=1;k<nums.size();k++)
{
if(nums[k]!=nums[i])
nums[++i]=nums[k];
}
return i+1;
}
};