题目
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
if(nums.size()==0)
return 0;
int i=0;
for(int j=i+1;j<nums.size();j++)
{
if(nums[j]!=nums[i])
{
i++;
nums[i]=nums[j];
}
}
return i+1;
}
};
执行结果
思路
在这一道题目中运用了两个指针来完成题目所给的任务,只要判断出来nums[i]=nums[j]的情况发生,for语句就会让j增加指向后面的数组元素继续与nums[i]进行比对,如果nums[i]≠nums[j],就把i先递增1,然后把nums[j]的值赋给nums[i](此时的i是经过加1处理后的i的值)。然后再次重复上述相同的过程,直到j到达数组的末尾为止。这个循环过程结束之后,返回i+1的值,即是数组中不重复的元素的个数。