
难度: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%
近期评论