思路:
- 记录每个元素前面有几个重复的数字,但是写的时候感觉容易出错,还是第二种好一点。复杂度\(O(n)\)。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i = 0,k = 0;
if(nums.size() < 2) return nums.size();
for(i = 0; i < nums.size(); i++){
nums[i-k] = nums[i];
while(nums[i] == nums[i+1] && i < nums.size()-1){
k++;
i++;
}
}
return nums.size()-k;
}
};
- 相当于设置两个指针,第一个指针记录新数组,第二个指针不断向后移动,遇到重复的跳过,遇到不同的则利用第一个指针进行覆盖。复杂度 \(O(n)\)。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i = 0, j = 1;
if(nums.size() < 2) return nums.size();
for(i = 0; i < nums.size()-1; i++){
if(nums[i] != nums[i+1]) nums[j++] = nums[i+1];
}
return j;
}
};