26. Remove Duplicates from Sorted Array
题意
使用空间复杂度为O(1)的算法来对已排好序的数组进行去重。
要注意的是,如果去重后只有k个数,必须要保证前k个数有序排在数组里的前k个位置。
时间复杂度O(n)
思路
这不就是unique函数干的事情嘛哈哈哈哈!
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
return unique(nums.begin(), nums.end()) - nums.begin();
}
};
当然,还是得去手写一下底层的,太依赖别人的函数总是不好的。
做法就是不断地把非重复字符移到前面来。
用p1作为搜寻的指针,用p2作为指向非重复序列的最后一个字符的指针。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0) return 0;
int p1 = 0, p2 = 0;
while (++p1 != nums.size())
{
if (nums[p1] != nums[p2])
nums[++p2] = nums[p1];
}
return p2+1;
}
};