欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

26. Remove Duplicates from Sorted Array

程序员文章站 2024-02-17 12:03:10
...

题目描述:给定一个排好序的数组,删除其中的重复元素使得每个元素只出现一次,返回去重后的数组长度。要求原地操作。

分析:排好序说明重复元素都是相邻的,要原地操作就只能在原数组上修改元素位置,将不同的元素移到数组前部分。

方法一:设定一前一后两个下标指针,遍历一遍原数组。若快指针指向的元素没出现过,则将此元素赋给慢指针所指位置,两下标同时前移;若出现过则快指针前移。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() == 0)
            return 0;
        int j = 1;
        for (int i = 1; i < nums.size(); i ++)
        {
            if (nums[i] != nums[i - 1])
                nums[j ++] = nums[i];
        }
        return j;
    }
};

方法二:用STL的unique和distance函数,效率更高。

  1. unique作用于数组或vector,作用是将数组中不同的元素移到前部分,重复的元素并未删除,只是移到后面,所以数组大小并没有变,只是返回第一个重复元素的下标。奇怪的是测试发现后移之后会改变重复元素的值。

  2. distance作用于数组或vector,作用是返回两迭代器或下标之间的距离。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        return distance(nums.begin(), unique(nums.begin(), nums.end()));
    }
};