Leetcode デーの削除要素の説明

WBOY
WBOYオリジナル
2024-07-16 19:46:461188ブラウズ

Leetcode Day Remove Element Explained

問題は次のとおりです:

整数配列 nums と整数 val を指定すると、nums 内のすべての val がインプレースで削除されます。要素の順序は変更される場合があります。次に、val.

に等しくない nums 内の要素の数を返します。

val に等しくない nums 内の要素の数が k であると考えます。受け入れられるようにするには、次のことを行う必要があります。

  • 配列 nums を変更して、nums の最初の k 要素に val と等しくない要素が含まれるようにします。 nums の残りの要素は、nums のサイズと同様に重要ではありません。
  • k を返します。

カスタム審査員:

審査員は次のコードを使用してソリューションをテストします:

int[] nums = [...]; // Input array
int val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
                            // It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
    assert nums[i] == expectedNums[i];
}

すべてのアサーションが合格した場合、ソリューションは受け入れられます。

例 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).

例 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).

これが私がそれを解決した方法です:

この問題を解決するために、私は 2 つの主な戦略を使用しました:

  1. インプレース置換: val に等しくない要素を格納する新しい配列を作成する代わりに、同じ配列 nums を使用して、削除する必要がある要素を上書きします。
  2. 2 ポインター手法: 1 つのポインター (i) は配列内の各要素を反復処理し、別のポインター (k) は次の非 val 要素が配置される位置を追跡します。
  • まず、ポインター k を初期化し、0 に設定します。これにより、次の非 val 要素が配置される位置が追跡されます。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:       
    k = 0
  • nums 配列を反復処理します。
  • k を追跡するために、現在の要素 nums[i] が val と異なるかどうかを確認します。
  • そうである場合、要素 nums[i] を k 番目の位置に移動し、k を 1 だけ増分して、次の非 val 要素の位置を更新します。
for i in range(len(nums)):
    if nums[i] != val:
        nums[k] = nums[i]
        k += 1
  • val と等しくない要素の数である k を返します。
return k

完成したソリューションは次のとおりです:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]
                k += 1
        return k

以上がLeetcode デーの削除要素の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。