leetcode_remove_duplicates_from_sorted_array_ii

难度:Medium

解题思路:本题是remove_duplicates_from_sorted_array的一个升级版。同样使用两个迭代器,一个指向已经处理好的数组的最后一位,另一个进行遍历。需要加入一个计数器,存储当前元素已经处理过的个数。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto solved_it = nums.begin();
if(nums.size() <= 2) return nums.size();
auto unsolved_it = solved_it+1;
int count = 1;
while(unsolved_it != nums.end())
{
if(*unsolved_it != *solved_it && (count == 2 || count == 1))
{
swap(*unsolved_it, *(++solved_it));
count=1;
unsolved_it++;
}
else if(*unsolved_it == *solved_it && count == 2)
{
unsolved_it++;
}
else if(*unsolved_it == *solved_it && count == 1)
{
swap(*unsolved_it, *(++solved_it));
count=2;
unsolved_it++;
}
}
return solved_it-nums.begin()+1;
}
};

运行结果:19ms,超过15.84%