記事のディレクトリ:
- タイトル
- スクリプト
- スクリプトロジック
トピック:
ソートされた配列を考えると、あなたはそれぞれの要素が削除され、配列の新しい長さを戻した後、一度だけ表示されるように、所定の位置に繰り返し要素を削除する必要があります。
配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用の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を)。
//関数内の入力アレイと、発信者が表示されている変更。
//あなたの関数の戻りの長さは、それが配列の長さの範囲のすべての要素を出力します。
(;私は<lenを、INT I = 0 I ++){用
プリント(NUMS [I]);
}
スクリプト:106msと[もし]
クラスソリューション: デフ removeDuplicates(自己、NUMS:リスト[INT]) - > int型: N1 = 0 しばらく真: 試してみる: NUMS [N1 + 1 ] を除いてはIndexError: リターン(LEN(NUMS)) であれば NUMS [N1] == NUMS [N1 + 1 ]: nums.pop(N1) 他: N1 + = 1
スクリプトロジック:
- リストを命じた重複する項目を削除します
- この問題は、要素が存在する以外...前回の試行で得られたキーを使用して、比較的単純なロジックで、ない場合は、現在のリストの要素数が返され、存在する場合、要素は前とかどうかを判断した後等しい、等しい場合には、リストから要素ポップアップ前に等しくない場合、一つのインデックス数が増加します。
- 相対的に低いを入力します。