Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
What if duplicates are allowed at most twice?
For example,
Given sorted array nums = [1,1,1,2,2,3]
,
Your function should return length = 5
, with the first five elements of nums being 1
, 1
, 2
, 2
and 3
. It doesn't matter what you leave beyond the new length.
解题思路:给定一个排好序的数组,允许每个数字出线两次。如果多于两次,则删除。
其实这个题与之前只允许出现一次的那个题目很相似,因为数组已经排好序,所以我们可以进行遍历一次,如果出现的次数多于两次,则不保留,进行删除。
其实这个题目有个对index++和++index的考察。
代码如下:
class Solution
{
public:
int removeDuplicates(vector<int>& nums)
{
int n=nums.size();
if(n<=2)
{
return n;
}
int index=2;
for(int i=2;i<n;i++)
{
if(nums[i]!=nums[index-2])
{
nums[index++]=nums[i];
}
}
return index;
}
};
第二种解法:
class Solution {
public:
int removeDuplicates(vector<int>& nums)
{
int n=nums.size();
int index=0;
for(int i=0;i<n;i++)
{
if(i<n-2&&nums[i]==nums[i+1]&&nums[i]==nums[i+2])
{
continue;
}
nums[index++]=nums[i];
}
return index;
}
};