<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">Follow up for "Remove Duplicates":</span>
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.
Subscribe to see which companies asked this question
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int length = nums.size();
if(length == 0 || length < 3)
return length;
int index = 1;
for(int i = 2; i < length; ++i)
{
if(nums[i] != nums[index - 1])
nums[++index] = nums[i];
}
return index + 1;
}
};
去除重复次数超过两个的数字,同样也是一次遍历,O(n)复杂度,在原数组上操作,O(1)的复杂度
几个关键点:
1.首先考虑当vector的大小较小时,是否能够直接满足条件,这种情况可以在程序头部直接给出。
2.在遍历过程中,只需要考虑间隔一个后,前后数据是否重复,因为连续的挨着的数字是不会出现三个重复的,只有在出现三个数字的时候,才会出现是否有三个相同数字的情况,所以在遍历的过程中,只要不断保证前面的都是不超过两个重复的,后面的不断往前面进行验证,即可。