Description
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
Example
Given input array
nums = [1,1,2]
, Your function should returnlength = 2
, with the first two elements of nums being 1 and 2 respectively. It doesn’t matter what you leave beyond the new length.
Discussion
给有序数组去重。我们需要维护两个指针i
和newLen
。i
用来遍历数组nums
,newLen
用来记录无重复项的新数组的长度。每次判断第i
项与第i-1
项是否相等,相等则跳过,否则newLen++
。
算法的时间复杂度为O(n)
。
C++ Code
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0)
{
return 0;
}
int newLen = 1;
for(int i = 1; i < nums.size(); i++)
{
if(nums[i] != nums[i - 1])
{
nums[newLen] = nums[i]; //nums的前newLen个元素是新数组
newLen ++;
}
}
return newLen;
}
};