首页 > 编程语言 > 详细

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

时间:2020-08-18 23:42:43      阅读:85      评论:0      收藏:0      [点我收藏+]

题目的暴力解法很简单,遍历过程中记录哪一段是重复的,然后将那一段同值元素替换为只有一个元素即可。这个暴力解法的时间复杂度是O(n^2)的。

我按照自己的思路自己实现了代码如下(通过比较相邻元素)

 1 class Solution {
 2 public:
 3     int removeDuplicates(vector<int> &nums) {
 4         if (nums.size() < 2) return nums.size();
 5         int len = nums.size();
 6         int j = 0;
 7         for (int i = 0; i < len-1; i++) {
 8             if (nums[i] != nums[i + 1]) {
 9                     nums[j++]=nums[i];
10                     }
11                 }
12         nums[j++]=nums[len-1];
13         return j;
14     }
15 };

里面有三点细节需要考虑到的。

第一点,因为基于比较来移动指针。所以对于只含有一个元素或者没有元素的情况是首先要考虑的。

第二点,如果所有元素同值,那么指针也是没法移动的,也需要考虑。

第三点,对于每个元素和下一个元素这种比较方法,最后一个值的元素在for循环中没有识别,需要在循环后再次判断。

 

更好的解法被称作双指针法。这里的“指针”并非c语言上的指针。参考代码如下

 1 class Solution {
 2 public:
 3 int removeDuplicates(vector<int>& nums) {
 4     if (nums.size() < 2) return nums.size();
 5     int j = 0;
 6     for (int i = 1; i < nums.size(); i++)
 7         if (nums[j] != nums[i]) nums[++j] = nums[i];
 8     return ++j;
 9 }
10 };

 

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

原文:https://www.cnblogs.com/dongjl/p/13526600.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!