题目描述
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
思路
采用双指针,一个指针负责向后传递原数组,一个指针负责保存不重复的元素。(嘴笨,还是看代码吧,不难理解)
代码
时间复杂度:O(n)
空间复杂度:O(1)
int removeDuplicates(vector<int>& nums) {
int n = nums.size(); //获取数组长度
int fast = 1;
int last = 1;
if(n == 0)
{
return 0;
}
else
{
while(fast < n)
{
if(nums[fast]!=nums[fast-1])
{
nums[last] = nums[fast];
fast++;
last++;
}
else
{
fast++;
}
}
return last;
}
}