1. 题目
Remove Duplicates from Sorted Array II
在Remove Duplicates from Sorted Array 的基础上,允许每个元素重复出现2次
如[1,1,2,2,2,3],生成新数组为[1,1,2,2,3]
2. 分析
1:在[2, len)范围内遍历数组
将nums[i]与nums[index - 2] (即新数组的倒数第2个元素) 作比较
若不相等,则将nums[i]放回原数组,达到去重的目的
若数组长度<=2,则返回值为数组长度
将index从2改为3,即可实现:只允许出现3次的情况,因此扩展性更好
2:在[1, len-1)范围内遍历数组
判断是否连续出现3个相同的数
3. 代码
1)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = nums.size();
if(len <= 2)
return len;
int index = 2;
for(int i = 2; i < len; ++i)
{
if(nums[i] != nums[index - 2])
{
// 不要写成 nums[index - 2] = nums[i];
nums[index] = nums[i];
++index;
}
}
return index;
}
};
2)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
int index = 0;
for(int i = 0; i < n; ++i)
{
// 注意不要把 continue 跟赋值语句的顺序写反
if(i > 0 && i < n - 1 && nums[i] == nums[i + 1] && nums[i] == nums[i - 1])
{
continue;
}
nums[index] = nums[i];
++index;
}
return index;
}
};