ソート配列から重複をLeetCode-簡単削除

###原题目
`` `cppに
ソートされた配列のNUMSを考えると、その場で各要素が一度だけ表示され、新しい長さを返すような重複を削除。
あなたはO(1)余分なメモリをインプレース入力配列を変更することでこれを行う必要があり、別のアレイのための余分なスペースを割り当てないでください。
例1:
所与NUMS = [1,1,2]
あなたの関数は、それぞれ1と2であるNUMSの最初の2つの要素と、長さ= 2を返すべきです。
あなたが返される長さを超えて残すかは重要ではありません。
例2:
与えられたNUMS = [0,0,1,1,1,2,2,3,3,4]、
あなたの関数は、それぞれ0、1、2、3、及び4に変更されるNUMSの最初の5つの要素と、長さ= 5を返すべきです。
値が返された長さを超えて設定されているかは重要ではありません。
明確化:
返される値は整数であるが、あなたの答えは、配列である理由混乱?
入力アレイは、入力アレイの変形がよくとして発呼者に知られているであろうことを意味する、参照によって渡されることに注意してください。
内部的には、あなたはこれを考えることができます。
// NUMSは、参照によって渡されます。(すなわち、コピーを作成せずに)
int型のlen = removeDuplicates(NUMS)。
NUMS //あなたの関数への任意の変形例では、発信者によって知られているであろう。
//使用して、関数によって返された長さは、それが最初のlen要素を出力します。
のために(int型I = 0; I <LEN; I ++){
    印刷(NUMSを[I]);
}
`
###彼の最初の溶液の
愚かなので、それだけを除去するために、消去動作を使用して考えるだけでなく、ループおよび条件判定のために使用される場合、この場合もあります変更するには、コンテナのイテレータの問題は、更新に失敗するが、そのアプローチは遅すぎる163msです。
###優れたソリューションは、オンライン
私はより多くの訓練を必要とする、C ++アルゴリズムコンテナがユニークな、背中に繰り返すことができました、そして、消去によって削除され、その基盤は固体ではないとは思いませんでした。
されている以下のコメントは、私のコードを打って、本当に彼の書き込みを見ていない他の誰かのは、ああGeshaです。
`` `cppを
する#include <iostreamの>
書式#include <ベクトル>
のstd ::ベクトルを用いて、
//クラスのソリューション{
//パブリック:
// int型removeDuplicates(ベクトル<整数>&NUMS){
//用(!オートBEG = nums.begin(); BEG = nums.end(); BEG ++){
//
/ / IF(!BEG = nums.begin()&& * BEG == *(BEG-1))
// {
// BEG = nums.erase(BEG-1); //更新迭代器(重点)
//}
//}
//戻りnums.size()。
//}
//}。
#include <アルゴリズム>
クラスソリューション{
パブリック:
 int型removeDuplicates(ベクトル<整数>&NUMS){
  nums.erase(STD ::ユニーク(nums.begin()、nums.end())、nums.end())。
  リターンnums.size();
 }
 
}。
INTメイン(){
 溶液;
 ベクター<整数>テスト{1,1,2,2}。
 std :: coutの<< a.removeDuplicates(テスト)<<はstd ::てendl;
 {(テスト自動A)のため
  のstd :: coutの<<。
 }
}
`` `
自分のアイデアが###
本当にもっと練習する必要がある、このコード行は、物事を解決することができ非常に考えるように複雑になることができない、それは操作が付属して考える必要があり、11 C ++の様々な機能を十分に活用します。

おすすめ

転載: www.cnblogs.com/Yekko/p/12130258.html