80. 删除排序数组中的重复项 II
解题思路:
既然题目要求原地算法,那就直接在原数据上做修改,设一个gap,这个的作用就是标记我们删除的元素的个数,后面的元素直接对前面重复的元素进行覆盖,但是覆盖多少个呢,就是gap个。
c++代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int gap = 0, i, cal = 0, len = nums.size();
for(i=0;i<nums.size();i++){
if(i - gap - 1 >= 0 && nums[i - gap - 1] == nums[i]){
cal ++;
if(cal >= 2){
len --;
gap ++;
}
}else{
cal = 0;
}
nums[i-gap] = nums[i];
}
return len;
}
};