これは次のような簡単な問題です:
整数配列 nums と整数 val が与えられた場合、nums 内の val の出現箇所をすべてその場で削除します。要素の順序は変更される場合があります。次に、val と等しくない要素の数を nums で返します。
val に等しくない nums 内の要素の数が k であると考えてください。受け入れられるには、次のことを行う必要があります:配列 nums を変更して、nums の最初の k 要素に val と等しくない要素が含まれるようにします。 nums の残りの要素は、nums のサイズと同様に重要ではありません。
k を返します。カスタム審査員:
審査員は次のコードを使用してソリューションをテストします:
int[] nums = [...]; // 入力配列
int val = ...; // 削除する値
int[] ExpectedNums = [...]; // 正しい長さの期待される答え。
// val に等しい値がない状態でソートされます。
int k =moveElement(nums, val); // 実装を呼び出します
アサート k == ExpectNums.length;
ソート(数値, 0, k); // nums
の最初の k 要素を並べ替えます for (int i = 0; iassert nums[i] == ExpectedNums[i];
}すべてのアサーションが合格した場合、ソリューションは受け入れられます。
例 1:
入力: nums = [3,2,2,3]、val = 3
出力: 2、数値 = [2,2,,]
説明: 関数は、nums の最初の 2 つの要素が 2 である k = 2 を返す必要があります。
返された k の後に何を残しても問題ありません (したがって、それらはアンダースコアになります)。例 2:
入力: nums = [0,1,2,2,3,0,4,2]、val = 2
出力: 5、数値 = [0,1,4,0,3,,,_]
説明: 関数は k = 5 を返す必要があり、nums の最初の 5 つの要素には 0、0、1、3、4 が含まれます。
5 つの要素は任意の順序で返すことができることに注意してください。
返された k の後に何を残しても問題ありません (したがって、それらはアンダースコアになります)。制約:
0 0 0
この問題では、配列を反復して値を特定し、それを数値から削除する必要があります。
一見すると、別の配列でうまくいくのではないかと思うかもしれませんが、後で値を設定するためだけにもう一度反復を行う必要があります (Java はメソッド変数参照、つまりメソッド内を更新しないため、直接設定しても機能しません)変更されたように見えますが、メソッドの外に出ると古い参照が保持され、パフォーマンスが低下します。
最終結果は、異なる値以外の他の操作に依存しないため、単純にインデックスを保持し、var とは異なる方法で値を見つけたときに値を更新し、同じものをソリューションとしても使用できます。
class Solution { public int removeElement(int[] nums, int val) { int diffIndex = 0; for(int i=0;i<nums.length;i++) { if(nums[i] != val) { nums[diffIndex] = nums[i]; diffIndex++; } } return diffIndex; } }
実行時間: 0 ミリ秒、要素の削除の Java オンライン送信の 100.00% より高速です。
メモリ使用量: 42 MB、要素の削除に関する Java オンライン送信の 31.68% 未満。
—
それだけです!他に議論したいことがあれば、お気軽にコメントしてください。何か見逃した場合はお知らせください。適宜更新します。
次の投稿まで! :)
以上がLeetcode — トップインタビュー — 要素の削除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。