配列-並べ替え配列の重複数を削除-単純

1290 ワード

指定されたソート配列を記述し、元の配列から重複する数値を削除し、各要素が1回しか現れず、新しい配列の長さを返します.余分な配列空間を使用しないで、その場に余分な空間がない条件で完了する必要があります.サンプル
配列A=[1,1,2]を与えて、あなたの関数は長さ2を返すべきで、この時A=[1,2]です.
タイトルリンク
ぶんせき
方法の1つは,c++が持参したSTLを直接使用し,配列を並べ替え(ここでは並べ替え),unique関数を用いて繰り返し配列の先頭位置を返し,最後にeraseで削除することである.
方法2は配列を遍歴することであり,順序が整っているため,隣接する要素は同じか異なるかである.異なる要素を配列ヘッダから格納を再上書きし、同じ直接スキップを行い、最後の配列の長さを上書き位置に1(配列ヘッダを0)加算します.
プログラム

class Solution {
public:
    /*
     * @param nums: An ineger array
     * @return: An integer
     */
    /*
    //   
    int removeDuplicates(vector &nums) {
        // write your code here
        if(nums.empty())
            return 0;
        //sort(nums.begin(), nums.end());
	nums.erase(unique(nums.begin(), nums.end()), nums.end());
	for (int i = 0; i < nums.size(); i++)
		cout << nums[i] << " ";
	cout << endl;
	return nums.size();
    }
    */
    //   
    //    :     
    int removeDuplicates(vector &nums) {
        if(nums.empty())
            return 0;
        int j = 0;
        for(int i = 1; i < nums.size(); i++)//          ,   
        {
            if(nums[i] != nums[j])
                nums[++j] = nums[i];// 0 ++j            
        }
        return ++j;//j 0  ,    ++j
    }
};