方法一:耗时20ms
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() <= 2)
return nums.size();
int i = 1;
int pre = nums[0];
int preCount = 1;
while(i < nums.size())
{
if(pre == nums[i])
{
preCount++;
if(preCount > 2)//每次出现次数大于2就erase.
{
//需要删除nums[i]
nums.erase(nums.begin()+i);
continue;
}
}
else
{
preCount = 1;
pre = nums[i];
}
i++;
}
return nums.size();
}
};
方法二:耗时20ms
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() <= 2)
return nums.size();
int i = 1;
int pre = nums[0];
int preCount = 1;
int small = 1;//small表示移动数组后,指针应该指向的位置。
while(i < nums.size())
{
if(pre == nums[i])
{
preCount++;
if(small != i)//需要移动i到small 位置上。
{
nums[small] = nums[i];
}
if(preCount > 2)
{
small--;
}
}
else
{
preCount = 1;
pre = nums[i];
if(small!=i)
nums[small] = nums[i];
}
i++;
small++;
}
while(small < nums.size())//将后面重复的数字删除。
{
nums.pop_back();
}
return nums.size();
}
};