lintcode 删除排序数组中的重复数字

lintcode 删除排序数组中的重复数字

描述

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

样例

给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。

思路

先说我的思路,删除重复的元素即可,使用vector的迭代器iterator

class Solution {
public:
    /*
     * @param nums: An ineger array
     * @return: An integer
     */
    int removeDuplicates(vector &nums) {
        // write your code here
        if (nums.size() == 0)
            return 0;
        for (vector::iterator it = nums.begin(); it != nums.end()-1; ) {
            if (*it == *(it+1))
                it = nums.erase(it);
            else
                ++it;
        }
        return nums.size();
    }
};

这个算法很简单,我看了一下网上其他的想法,是使用了另外的一个指针来把不同的元素从0开始赋值,返回这个指针的长度。因为题目没有要求后来的数组要怎么样,这个思路很棒,值得学习。


class Solution {
public:
    /*
     * @param nums: An ineger array
     * @return: An integer
     */
    int removeDuplicates(vector &nums) {
        // write your code here
        if (nums.size() <= 1)
            return nums.size();
        int index = 0;
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] != nums[index])
                nums[++index] = nums[i];
        }
        return index+1;
    }
};

你可能感兴趣的:(每日一练,lintcode,算法)