题目描述:与26题不同的是每个数字最多允许出现两次,同样返回处理后的长度。
分析:同样因为已排好序,所以出现次数是否大于两次可用A[i] == A[i - 2]来判断。复杂度也同样是O(n), O(1)。
代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() <= 2)
return nums.size();
int k = 2;
for (int i = 2; i < nums.size(); i ++)
{ //注意此处是k -2而不是i - 2。因为此时i - 2处可能已经改了值。例如[1,1,1,2,2],第一次去重时k = 2,使A[2] = 2,然后i = 4时发现A[i] == A[i - 2]略过了。事实上一直在保持k记录的是前面所有不同元素最多出现两次的总次数。
if (nums[i] != nums[k - 2])
nums[k ++] = nums[i];
}
return k;
}
};