問題:
配列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つの要素は任意の順序であることに注意してください。
あなたは、新しい配列の長さの後ろの要素を超えて検討する必要がありません。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/remove-element
答えは1:
二つのポインタiおよびjは、iを0に初期化され、Jがlenする - NUMS [i]がヴァルに等しいときに1を、iが後退、jは交換点のIおよびJの値、前方に移動されます。
NUMS [j]は常に無等しいヴァルまでデクリメントヴァル、Jに等しい場合NUMS [j]を防ぐためには、また、ヴァルに等しいです。
1 クラスのソリューション: 2 DEF removeElement(自己、NUMS:リスト[整数]、ヴァル:INT) - > INT: 3 nums_len = LEN(NUMS) 4 なら nums_len == 0 5 戻り0 6 、I = 0 7 J = nums_len - 1 8 ながら、私の< J: 9の 場合 NUMS [J] == :ヴァル 10 J - = 1 11が 続行 12を 場合 NUMS [I] == ヴァル: 13 のt =のNUMS [I] 14 NUMS [I] = NUMS [J] 15 NUMS [J] = T 16 J - = 1 17 I + = 1 18 なら NUMS [J] == ヴァル: 19 J - = 1 20 リターン J + 1
答え2:
、提出され他の人が簡単な方法を発見参照してください。
kは新しい配列の終点が知られており、0に初期化されてみましょう。
要素はヴァルに等しくない古いアレイトラバース、つまり、要素は新しい配列の要素である、NUMS [k]を聞かせて要素に等しく、K 1を加えてみましょう。
1 クラスのソリューション: 2 DEF removeElement(自己、NUMS:リスト[整数]、ヴァル:INT) - > INT: 3 nums_len = LEN(NUMS) 4 、K = 0 5 ため NUM にNUMS: 6 場合!NUM = ヴァル: 7 NUMS [K] = NUM 8 K + = 1 9 戻り K