题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用o(1)额外空间的条件下完成。
1.思路:
- 我们使用一个变量i代表需要改变的数组元素的位置。
- 我们使用另一个变量j跳过重复项。
- 当 nums[i]!=nums[j]时,我们需要将i增加1,把j处的元素赋值给nums[i].
- 注意到题目的要求,我们使用了如下代码。
2.代码:
public:
int removeDuplicates(vector<int>& nums) {
int i=0;
int j;
if(nums.size()==0)
return 0;
for(j=1;j<nums.size();j++)
{if(nums[i]!=nums[j])
{ i=i+1;
nums[i]=nums[j];
}
}
return i+1;
}
};
3.分析:
- 空间复杂度为o(1),时间复杂度为o(n).
- 需要判断nums.size()是否为0,否则代码会出错。