26. Remove Duplicates from Sorted Array

原创 2015年07月09日 12:36:25

这道题目,我一开始以为要改变nums里面的元素,所以使用了vector的erase方法,所以运行时间较长,56ms。第一个版本,每次只erase一个元素,第二个版本,每次erase一段重复的元素。第一个版本的代码如下:

    int removeDuplicates(vector<int>& nums) {
        if (nums.size() == 0)
            return 0;
        int len = (int)nums.size(), i, last = nums[0], del = 0; // del记录已经删除了多少重复元素
        for (i=1; i<len-del; i++) { // i的范围随着del的增加而变小
            if (nums[i] != last) {
                last = nums[i];
            } else {
                nums.erase(nums.begin()+i); // 删除第i个元素
                del++;
                i--; // 删除当前元素后,需要改变i的数值
            }
            
        }
        return len-del;
        
    }

第二个版本的代码如下:

    int removeDuplicates(vector<int>& nums) {
        if (nums.size() == 0) {
            return 0;
        }
        // del记录已经删除了多少重复元素,start记录要删除的一段元素的起始点
        int len = (int)nums.size(), i, last = nums[0], del = 0, start = 0;
        for (i=1; i<len-del; i++) {
            if (nums[i] != last) {
                last = nums[i];
                if (i-start >= 2) {
                    nums.erase(nums.begin()+start, nums.begin()+i-1);
                    del += i-start-1;
                    i -= i-start-1; // 删除一段元素之后,需要改变i的数值
                }
                start = i;
            }
        }
        if (start != len-del-1) { // 如果nums的最后一个元素重复了
            nums.erase(nums.begin()+start, nums.begin()+len-del-1);
            del += len-del-1-start;
        }
        return len-del;
    }
考虑到第一个版本和第二个版本使用到了vector的erase方法,nums出于动态的变化之中,导致代码逻辑不够清晰,调试起来也比较困难。因此我又参考了网上的一些解法。第三个版本的算法思想如下:

1. i从1开始,遇见和上一个不一样的,就把nums[i]放到j指向的位置,j++

2. nums[i]==nums[i-1],则i继续往下走

代码如下:

    int removeDuplicates(vector<int>& nums) {
        if (nums.size() == 0) {
            return 0;
        }
        int j = 1, len = (int)nums.size(); // j指向的位置,就是新元素应该放入的位置
        for (int i=1; i<len; i++) {
            if (nums[i] != nums[i-1]) {
                nums[j] = nums[i];
                j++;
            }
        }
        return j;
    }



LeetCode_Easy心得:26. Remove Duplicates from Sorted Array(C语言)

26. Remove Duplicates from Sorted Array
  • hhhhhyb
  • hhhhhyb
  • 2017年07月28日 22:03
  • 115

LeetCode笔记:26. Remove Duplicates from Sorted Array

固定内存下删除有序数组中重复的数字

26. Remove Duplicates from Sorted Array(java)

26. Remove Duplicates from Sorted Array(java)

LeetCode 26: Remove Duplicates from Sorted Array

LeedCode 26: Remove Duplicates from Sorted Array的三种解题思路

Leetcode NO.26 Remove Duplicates from Sorted Array

本题题目要求如下: Given a sorted array, remove the duplicates in place such that each element appear only ...

LeetCode OJ 26 Remove Duplicates from Sorted Array

毕设做累了,无聊刷个题压压惊。今天是第一次做leetcode的题目,做题顺序按照分类来做。 该题分类为线性表,题目难度为简单。 Given a sorted array, remove the d...
  • LLL_mj
  • LLL_mj
  • 2015年05月25日 14:30
  • 381

26. Remove Duplicates from Sorted Array [easy] (Python)

题目链接https://leetcode.com/problems/remove-duplicates-from-sorted-array/题目原文 Given a sorted array, r...

LeetCode 26_Remove Duplicates from Sorted Array

又有一段时间没有更新了,时间是非常的不够用啊,今天抽点儿时间,多刷几道吧。 这次是leetcode第26题,题目难度是属于easy的那种。并没有涉及什么高深算法,属于刚学C时练手的题目。这种题目对于...
  • cyfcsd
  • cyfcsd
  • 2015年11月25日 15:30
  • 336

LeetCode(26)Remove Duplicates From Sorted Array

题目如下 Given a sorted array, remove the duplicates in place such that each element appear only once an...

LeetCode 26 Remove Duplicates from Sorted Array(从已排序数组中移除重复元素)

翻译给定一个已排序的数组,删除重复的元素,这样每个元素只出现一次,并且返回新的数组长度。不允许为另一个数组使用额外的空间,你必须就地以常量空间执行这个操作。例如, 给定输入数组为 [1,1,2]你的函...
  • NoMasp
  • NoMasp
  • 2015年11月13日 22:41
  • 2247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:26. Remove Duplicates from Sorted Array
举报原因:
原因补充:

(最多只允许输入30个字)