検索
ホームページバックエンド開発PHPチュートリアル配列内に存在するリンクされたリストからノードを削除

3217。配列内に存在するリンクされたリストからノードを削除

難易度:

トピック: 配列、ハッシュ テーブル、リンク リスト

整数 num の配列とリンク リストの先頭が与えられます。 nums に存在する値を持つリンク リストからすべてのノードを削除した後、変更されたリンク リストの先頭を返します。

例 1:

  • 入力: nums = [1,2,3]、head = [1,2,3,4,5]
  • 出力: [4,5]
  • 説明: Delete Nodes From Linked List Present in Array 値 1、2、および 3 を持つノードを削除します。

例 2:

  • 入力: 入力: nums = [1]、head = [1,2,1,2,1,2]
  • 出力: [2,2,2]
  • 説明: Delete Nodes From Linked List Present in Array 値 1 のノードを削除します。

例 3:

  • 入力: nums = [5]、head = [1,2,3,4]
  • 出力: [1,2,3,4] Delete Nodes From Linked List Present in Array 値 5 を持つノードはありません。

制約:

  • 1 5
  • 1 5
  • nums のすべての要素は一意です。
  • 指定されたリスト内のノードの数は [1, 105] の範囲内です。
  • 1 5
  • 入力は、nums に存在しない値を持つノードがリンク リスト内に少なくとも 1 つ存在するように生成されます。

ヒント:

  1. nums のすべての要素を Set に追加します。
  2. リストをスキャンして、セットをチェックして現在の要素を削除する必要があるかどうかを確認します。

解決策:

リンクされたリストをたどって、配列 nums に値が存在するノードをすべて削除する必要があります。

アプローチ:

  1. 高速検索用のハッシュ セット: nums に値が存在するかどうかを効率的にチェックする必要があるため、nums をハッシュ セットに変換します。これにより、各値の O(1) ルックアップが可能になります。
  2. リンクされたリストを反復処理します: リンクされたリストを反復処理し、ハッシュ セットに値が存在するノードを削除します。
  3. ポインター操作: 反復中に、nums 配列の値と一致するノードを「スキップ」するようにポインターを調整します。

手順:

  1. O(1) ルックアップ用に nums をハッシュ セットに変換します。
  2. ノードを効率的に削除できるように、2 つのポインターを使用してリンク リストをトラバースします。1 つは現在のノード用、もう 1 つは前のノード用です。
  3. 各ノードについて、値がハッシュ セットに含まれているかどうかを確認します。存在する場合は、前のノードの次を更新して、現在のノードをスキップします。

このソリューションを PHP で実装してみましょう: 3217。配列内に存在するリンクされたリストからノードを削除

<?php // Definition for a singly-linked list node.
class ListNode {
    public $val = 0;
    public $next = null;
    function __construct($val = 0, $next = null) {
        $this->val = $val;
        $this->next = $next;
    }
}

class Solution {

    /**
     * @param Integer[] $nums
     * @param ListNode $head
     * @return ListNode
     */
    function removeElements($head, $nums) {
        ...
        ...
        ...
        /**
         * go to ./solution.php
         */
    }
}

// Example usage:

// Linked List: 1 -> 2 -> 3 -> 4 -> 5
$head = new ListNode(1);
$head->next = new ListNode(2);
$head->next->next = new ListNode(3);
$head->next->next->next = new ListNode(4);
$head->next->next->next->next = new ListNode(5);

// Array nums: [1, 2, 3]
$nums = [1, 2, 3];

$solution = new Solution();
$result = $solution->removeElements($head, $nums);

// Function to print the linked list
function printList($node) {
    while ($node !== null) {
        echo $node->val . " ";
        $node = $node->next;
    }
}

// Print the resulting linked list
printList($result); // Output: 4 5
?>

説明:

  1. removeElements($head, $nums):

    • まず、高速検索のために nums をハッシュ セット ($numSet = array_flip($nums);) に変換します。
    • ダミーノードが作成され、リストの先頭にリンクされます。これは、ヘッド ノードの削除などの特殊なケースを簡素化するのに役立ちます。
    • prev ポインターは現在のノードの前のノードを追跡するため、リスト内で現在のノードをスキップして削除できます。
    • 各ノードについて、その値が numSet にあるかどうかを確認します。その場合、現在のノードをスキップするように prev->next ポインタを調整して削除します。
  2. エッジケース:

    • ヘッド ノードを削除する必要がある場合、ダミー ノードはヘッドを確実に削除し、正しいリストを返すことができることを保証します。
    • 複数の連続したノードを削除する必要があるケースを処理します。
  3. 複雑さ:

    • 時間計算量: O(n)、n はリンク リスト内のノードの数です。各ノードを 1 回ずつ訪問します。 nums を集合に変換するには O(m) がかかります。ここで、m は nums のサイズです。
    • 空間複雑度: 数値セットを保存するための O(m)。

チュートリアルの例:

入力 nums = [1, 2, 3] および head = [1, 2, 3, 4, 5] の場合、アルゴリズムは次のようになります:

  • ノード 1 から開始し、nums に 1 が含まれているかどうかを確認し、それを削除します。
  • ノード 2 に移動し、nums に 2 が含まれているかどうかを確認して、ノード 2 を削除します。
  • ノード 3 に移動し、nums に 3 が含まれているかどうかを確認して、ノード 3 を削除します。
  • ノード 4 と 5 に移動します。これらは nums に含まれていないため、リストに残ります。

結果のリンク リストは [4, 5] です。

連絡先リンク

このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!

このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:

  • LinkedIn
  • GitHub

以上が配列内に存在するリンクされたリストからノードを削除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?May 03, 2025 am 12:21 AM

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

セッションがサーバーで機能していない場合、どのような措置を講じますか?セッションがサーバーで機能していない場合、どのような措置を講じますか?May 03, 2025 am 12:19 AM

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()関数の重要性は何ですか?session_start()関数の重要性は何ですか?May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?May 03, 2025 am 12:10 AM

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

PHPセッションはWeb開発でどのような問題を解決しますか?PHPセッションはWeb開発でどのような問題を解決しますか?May 03, 2025 am 12:02 AM

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。