【数组】26. 删除排序数组中的重复项

题目:

 

 

解答:

思路:双指针法。

数组完成排序后,可以放置两个指针i和j,其中i是慢指针,而j是快指针。只要nums[i] = nums[j],就增加j以跳过重复项。

当遇到nums[i] != nums[j]时,跳过重复项的运行已经结束,因此必须把它(nums[j])的值复制到nums[i+1]。然后递增i,接着我们再次重复相同的过程,直到j到达数组的末尾为止。

 1 class Solution {
 2 public:
 3     int removeDuplicates(vector<int>& nums) 
 4     {
 5         int len = nums.size();
 6         if (len <= 1)           // 注意这里的判定,否则提交会不过。
 7         {
 8             return len;
 9         }
10 
11         int begin = 0;
12         int end = 0;
13         while (end < len)
14         {
15             if (nums[begin] == nums[end])
16             {
17                 end++;
18             }
19             else
20             {
21                 nums[++begin] = nums[end++];
22             }
23         }
24 
25         return begin + 1;
26     }
27 };

 

posted @ 2020-05-04 15:28  梦醒潇湘  阅读(148)  评论(0)    收藏  举报