80. Remove Duplicates from Sorted Array II
Medium
623520FavoriteShare
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
Example 1:
Given nums = [1,1,1,2,2,3], Your function should return length =5
, with the first five elements ofnums
being1, 1, 2, 2
and 3 respectively. It doesn't matter what you leave beyond the returned length.
Example 2:
Given nums = [0,0,1,1,1,1,2,3,3], Your function should return length =7
, with the first seven elements ofnums
being modified to0
, 0, 1, 1, 2, 3 and 3 respectively. It doesn't matter what values are set beyond the returned length.
解题思路:
用stop指针指向需要修改的内容,用i,j两个指针以滑窗的形式后移。
当nums[j]==nums[i]并且i,j距离小于等于2时,修改stop的值,stop++。
当nums[j]==nums[i]并且i,j距离大于2时,将j移到下一个不同的数字。stop不动。
当nums[j]!=nums[i],将i移到j处,循环操作。
最后把stop后面的内容都弹出。
答案:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int i=0;
int j=0;
int stop=0;
int count=0;
while(j<nums.size())
{
if(j<nums.size()&&nums[j]==nums[i])
{
if(j-i+1<=2&&j<nums.size())
{
nums[stop]=nums[j];
stop++;
j++;
}
else
{
while(j<nums.size()&&nums[j]==nums[i])j++;
}
}
else
{
i=j;
}
}
int p=nums.size()-stop;
//return p;
while(p>0)
{
nums.pop_back();
p--;
}
return nums.size();
}
};