26. Remove Duplicates from Sorted Array

题意

使用空间复杂度为O(1)的算法来对已排好序的数组进行去重。
要注意的是,如果去重后只有k个数,必须要保证前k个数有序排在数组里的前k个位置。
时间复杂度O(n)

思路

这不就是unique函数干的事情嘛哈哈哈哈!

代码

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

26. Remove Duplicates from Sorted Array
当然,还是得去手写一下底层的,太依赖别人的函数总是不好的。
做法就是不断地把非重复字符移到前面来。
用p1作为搜寻的指针,用p2作为指向非重复序列的最后一个字符的指针。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() == 0) return 0;
        int p1 = 0, p2 = 0;
        while (++p1 != nums.size())
        {
            if (nums[p1] != nums[p2])
                nums[++p2] = nums[p1];
        }
        return p2+1;
    }
};

26. Remove Duplicates from Sorted Array