leetCode #80 Remove Duplicates from Sorted Array II

一个通过的解法如下:

首先判断元素个数是否不少于2个,因为在这样的情况下,无论怎么样nums整个数组都是符合要求的,可以直接返回本身;

对于一般的,首先,我们需要两个变量,一个用于记录被填补的个数cout,一个用于记录前一次的比较结果lastSame(初始化为false,符合策略需求),有如下策略

如果 此次比较的 i 与 i-1 这两个元素相同:

    1. 如果上一次比较也是两个元素相同,说明当前的元素i至少是第3个相同的元素,我们可以计数了,即++count;

    2. 如果上一次比较是不同的两个元素,这意味着当前的元素i是第二个相同的元素,根据题目要求,这个元素是可以保留的,所以我们不能把它记录在内,而是把它往前移动count这么多个位置。另外lastSame需要更新为true。

如果 此次比较的 i与 i-1 这两个元素不同,那就把这个元素往前挪count这么多个位置

 

 1 class Solution {
 2 public:
 3     int removeDuplicates(vector<int>& nums) {
 4         if (nums.size() < 3)
 5         {
 6             return nums.size();
 7         }
 8         
 9         int count = 0;
10         bool lastSame = false;
11         for (int i = 1; i < nums.size(); ++i)
12         {
13             if (nums[i] == nums[i-1])
14             {
15                 if (lastSame)
16                 {
17                     ++count;
18                 }
19                 else
20                 {
21                     lastSame = true;
22                     if (count)
23                     {
24                         nums[i - count] = nums[i];
25                     }
26                 }
27             }
28             else
29             {
30                 if (count)
31                 {
32                     nums[i - count] = nums[i];
33                 }
34                 lastSame = false;
35             }
36         }
37         
38         return nums.size() - count;
39         
40     }
41 };

 

posted @ 2017-11-16 10:26  小鸭酱的书签  阅读(117)  评论(0编辑  收藏  举报