(80)移除有序数组中的重复项2
我的解法:
使用初值为-2的count来记录到nums[i]的连续重复元素个数;
step记录到nums[i]时应被删除的元素个数,即后续元素应向前移动的个数
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int count = -2,step = 0;
for(int i = 1; i < nums.size(); ++i){
if(nums[i] == nums[i-1]){
count++;
if(count >= 0){
step++;
}
}
else count = -2;
nums[i-step] = nums[i];
}
return nums.size() - step;
}
};
改进解法:
直接在for循环中判断当前元素与前边两个元素是否都相等,是则将x加1。使用一个变量x替代了我的count和step
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()<3) return nums.size();
int x=0;
for(int i=2;i<nums.size();++i){
if(nums[i]==nums[i-x-1]&&nums[i]==nums[i-x-2]){
x++;
}
if(x>0){
nums[i-x]=nums[i];
}
}
return nums.size()-x;
}
};