Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3],
Your function should return length = 5, and A is now [1,1,2,2,3].
Example
在上题基础上加了限制条件元素最多可重复出现两次。因此可以在原题的基础上添加一变量跟踪元素重复出现的次数,小于指定值时执行赋值操作。但是需要注意的是重复出现次数occurence
的初始值(从1开始,而不是0)和reset的时机。
class Solution {
public:
/**
* @param A: a list of integers
* @return : return an integer
*/
int removeDuplicates(vector<int> &nums) {
if (nums.size() < 3) {
return nums.size();
}
int size = 0;
int occurence = 1;
for (vector<int>::size_type i = 1; i != nums.size(); ++i) {
if (nums[size] != nums[i]) {
nums[++size] = nums[i];
occurence = 1;
} else if (nums[size] == nums[i]) {
if (occurence++ < 2) {
nums[++size] = nums[i];
}
}
}
return ++size;
}
};
occurence
的值为1,而不是0. 理解起来也方便些。i
从1开始nums[size] != nums[i]
时递增size
并赋值,同时重置occurence
的值为1(nums[size] == nums[i])
时,首先判断occurence
的值是否小于2,小于2则先递增size
,随后将nums[i]
的值赋给nums[size]
。这里由于小标i
从1开始,免去了对i
为0的特殊情况考虑。size + 1
,即为++size