80. 删除有序数组中的重复项 II

自己做
解1:覆盖删除

class Solution {
public:int removeDuplicates(vector<int>& nums) {int i = 0; while(i < (int)nums.size()){int j = i + 1;while(j < (int)nums.size() && nums[i] == nums[j])j++;if(j - i >= 2){int sum = (j - i - 2); //删除个数for(int z = j; z < (int)nums.size(); z++) //覆盖nums[i + 2 + z - j] = nums[z];nums.resize((int)nums.size() - sum); //调整长度i += 2;}elsei++;}return nums.size();}
};

解2:优化解1

class Solution {
public:int removeDuplicates(vector<int>& nums) {int p = 0; int q = 0;//首先处理第一个字符while(q < nums.size() && nums[p] == nums[q]) //找到下个不同元素的位置q++;if(q - p >= 2) //只有一个元素,p位置不变p++; //两个及以上,p往后移动一位(指向末尾)//往后继续找while(q < nums.size()){while(q < nums.size() && nums[p] == nums[q]) //找到下个不同元素的位置q++;if(q + 1 < nums.size() && nums[q] == nums[q + 1]){ //有重复元素(插入两个)nums[++p] = nums[q];nums[++p] = nums[q];}else if(q < nums.size()) //无重复元素(插入一个)nums[++p] = nums[q];}nums.resize(p + 1);return nums.size();}
};
