タイトル説明
26.重複にソート配列を削除します。
ソートされた配列を考えると、あなたはそれぞれの要素が削除され、配列の新しい長さを戻した後、一度だけ表示されるように、所定の位置に定期的な要素を削除する必要があります。
配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用のO(1)余分なスペースの条件の下で完了しなければなりません。
例1:
アレイNUMS = [1,1,2]が与えられると、
関数は、2の新しい長さを返す必要があり、元の配列の最初の2つの要素はNUMS 1、2に変更されます。
あなたは、新しい配列の長さの後ろの要素を超えて検討する必要がありません。
例2:与えられたNUMS = [0,0,1,1,1,2,2,3,3,4]、
新しい関数は、長さ5を返す必要があり、元の配列NUMSの最初の5つの要素は0、1、2、3、4に変更されます。
あなたは、新しい配列の長さの後ろの要素を超えて検討する必要がありません。
説明:なぜ、戻り値は整数ですが、答えは、それの出力の配列ですか?
入力アレイは、入力アレイは、関数内の発呼者に見える変更することを意味する「参照」モードで渡されることに注意してください。
あなたは次のように内部動作があると想像することができます:
// NUMSはで渡さ「参照」です。換言すれば、引数は任意のコピーがありません INT LEN = RemoveDuplicates(NUMSを); // 関数に入力配列を変更し、呼び出し元が表示されています。 // あなたの関数が戻るの長さは、それが配列の長さの範囲のすべての要素を出力します。 以下のために(int型 I = 0 ; IがLEN <I ++は{) プリント(NUMS [I]); }
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
すべてのネットワークからの控除が著作権を保有。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。
回答:
解決策1:
この下には私の第二の反応溶液です、
最初の反応は、質問の意味を満たしていない、重いの新しいセット(配列)であるが、元の配列を変更していない(元の配列を変更するかどうか)(設定を検討する必要性の後)。
だから、マッププラスのために使用します。
しかし、まだ、それは質問[]余分なスペースを使用しないという意味に従わないので、実行時間のかかる400ms以内を+
VaRの removeDuplicates = 関数(NUMS){ nums.map((項目、指数) => { ための(I = 0せ; iがnums.lengthを<; Iは++ ){ 場合(項目=== NUMS [I] && iは=! = 指数){ nums.splice(I、 1 ) I - } } }) 戻りnums.length }。
解決策2:
私は時間がかかり、最小限の誰かの他のソリューションを見ていない:類似したポインタ、および2つのポインタがあります。実行するための追加のスペース60msの+を。
コードは以下の通りである(PSは:このコードは扱うことができない類似[0,1,0,1]この反復要素非隣接)
VaRの removeDuplicates = 関数(NUMS){ CONSTサイズ = nums.length。 聞かせてslowP = 0 ; ため(LET FASTP = 0; FASTP <サイズ; FASTP ++ ){ 場合(NUMS [FASTP] ==!NUMS [slowP]){ slowP ++ 。 NUMS [slowP] =のNUMS [FASTP] } } 戻り slowP + 1 。 }。