题目描述:
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.
思路:
这是第26题的修改版,要求每个元素最多出现2次。可通过增加一个rep变量记录重复次数。
定义区间 [0,k)范围为满足要求的数列
代码如下:
class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.size() == 0 || nums.size() == 1) return nums.size(); int k = 1; int pre = nums[0]; int rep = 1; for(int i = 1; i < nums.size(); ++i) { if(nums[i] != pre || rep < 2) // 当出现新元素或重复次数小于2时即进行赋值,维持循环不变量 { nums[k++] = nums[i]; if(nums[i] != pre) { pre = nums[i]; rep = 1; } else rep++; } } return k; } };
原文:https://www.cnblogs.com/harchar/p/10502060.html