1. 程式人生 > >lintcode 刪除排序陣列中的重複數字

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<int> &nums) {
        // write your code here
        if (nums.size() == 0)
            return 0;
        for (vector<int>::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<int> &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;
    }
};