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