LeetCode题目:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/
题目描述
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定 nums = [1,1,1,2,2,3],
函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。
你不需要考虑数组中超出新长度后面的元素。
思路参考 删除排序数组中的重复项中的第二种思路。但是在那个基础上添加一个标志位flag
代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size() == 0 || nums.size() == 1 )
return nums.size();
int i = 1; //数组遍历的下标
int k = 0;//新数组的下标
int flag = 0; //同一元素是否出现两次的标志位
for(;i<nums.size();i++)
{
if(nums[i-1] != nums[i])
{
nums[k] = nums[i-1];
flag = 0;
k++;
}
//相同元素,第一次出现
else if(nums[i-1] == nums[i] && flag == 0)
{
nums[k] = nums[i-1];
k++;
flag = 1;
}
//忽略出现多次的元素
}
//保存最后一个元素
nums[k] = nums[i-1];
//返回元素个数,所以下标加一
k++;
return k;
}
};