1. トピック:
配列 nums と値 val が与えられた場合、 val に等しい値を持つ要素をすべて削除し、削除後の配列の新しい長さを返す必要があります。
余分な配列スペースを使用しないでください。O(1) の余分なスペースのみを使用し、入力配列を適切に変更する必要があります。
要素の順序は変更できます。新しい長さを超える配列内の要素を考慮する必要はありません。
2.分析機能:
- 質問要件: 現場で削除する
- val のすべての要素を削除してから、 を削除します
结果数组一定比原数组的长度更短
。所定の位置での削除のリクエスト>我们可以把结果数组直接写在原数组上
、結果の配列は val に等しくない要素で構成され、位置 0 から結果の配列として特定の位置まで始まります。元の配列は 0 から配列全体の長さまで走査する必要があります。> ダブルポインターを使用します。 - 結果配列のポインタ: [0, left]。結果配列の目的は結果を収集することです。結果配列は左から順に追加されます。
- 元の配列のポインター: [0, right]、right <= 元の配列の長さ、および right は、元の配列の現在の要素が val に等しくなく、収集できるかどうかを示すために使用されます。
3. コード:
public int removeElement(int[] nums, int val) {
int n = nums.length;
int left = 0;
for (int right = 0; right < n; right++) {
if (nums[right] != val) {
nums[left] = nums[right];
left++;
}
}
return left;
}
4. 複雑さの分析:
時間計算量: O(n)、n はシーケンスの長さです。シーケンスを最大 2 回繰り返すだけで済みます。
空間複雑度: O(1)。必要なのは、複数の変数を保存するための一定のスペースだけです。
5. 概要:
この質問は比較的単純です。理解する必要があります。質問の意味: その場で削除、その場 ==> 結果は元の配列にのみ出力できます。削除すると、結果の配列の長さは短くなります。元の配列よりも。結果配列を 0 から使用して left++ を開始して収集し、右ポインタを使用して元の配列を 0 から走査して、現在の要素を収集できるかどうかを判断します。
==> 条件を満たすすべての要素を収集することが目的です。
この記事が役に立った場合は、忘れずに Yile に「いいね!」を押してください。ありがとうございます。