题目链接
Remove Duplicates from Sorted Array - LeetCode
注意点
- 解法二要考虑输入为空的情况
解法
解法一:只要两行!超级简单,使用了unique函数。时间复杂度为O(n)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
nums.erase(unique(nums.begin(),nums.end()),nums.end());
return nums.size();
}
};
解法二:来自官方题解。维护两个指针,i是慢指针,j是快指针。j向后移动,如果不等于i说明已经跳过了所有和i重复的数字,接下来就把j复制到i+1,然后继续移动j就好。时间复杂度为O(n)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i = 0,j,n = nums.size();
if(n == 0)
{
return n;
}
for(j = 1;j < n;j++)
{
if(nums[i] != nums[j]) nums[++i] = nums[j];
}
return i+1;
}
};