配列NUMSと値valを考えると、あなたはすべて同じ値valを削除するために要素を配置する必要があり、除去後の配列の長さを返します。
配列のための余分なスペースを使用しないでください、あなたは代わりに入力配列を変更し、使用のO(1)余分なスペースの条件の下で完了しなければなりません。
要素の順序を変更してもよいです。あなたは、新しい配列の長さの背後の要素を超えて検討する必要がありません。
例1:
所与NUMS = [3,2,2,3]、ヴァル= 3、
関数は、2の新しい長さを返す必要がありますし、最初の2つの要素のNUMSは2です。
あなたは、新しい配列の長さの背後の要素を超えて検討する必要がありません。
例2:
所与NUMS = [0,1,2,2,3,0,4,2]、ヴァル= 2、
新しい関数は、長さ5を返す必要があり、最初の5つの要素NUMSは0、1、3、0、4です。
これらの5つの要素は任意の順序であることに注意してください。
あなたは、新しい配列の長さの背後の要素を超えて検討する必要がありません。
説明:
なぜ、戻り値は整数ですが、答えは、それの出力の配列ですか?
入力アレイは、入力配列を変更することを意味する「参照」モードで渡されることに注意してくださいは、関数内の呼び出し元に表示されてください。
あなたは次のように内部動作があると想像することができます:
// NUMSはで渡さ「参照」です。これは、任意のコピー右引数である
int型のlen = removeElement(NUMS、ヴァル )。
//関数内の入力アレイと、発信者が表示されている変更。
//あなたの関数の戻りの長さは、それが配列の長さの範囲のすべての要素を出力します。
(;私は<lenを、INT I = 0 I ++){用
プリント(NUMS [I]);
}
出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/remove-element:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
この方法の一つ
公共 int型 removeList(INT [] NUMS、INT ヴァル){ 場合(nums.length == 0 ){ 戻り 0 ; } int型私は= 0 。 用(INT J = 0 ; J <nums.length; J ++ ){ 場合(!NUMS [J] = ヴァル){ NUMS [I] = NUMS [J]。 I ++ ; } } を返す私は、 }
方法二
公共 INT removeList2(INT [] NUMS、INT ヴァル){ INT iは= 0 。 INT、N = nums.length。 一方、(I < N){ 場合(NUMS [I] == ヴァル){ NUMS [I] = NUMS [N - 1 ]。 N - ; } 他{ I ++ 。 } } 戻りN。 }
終わり、元旦ブラシ質問2