この記事はWeChatの公開アカウント「Java Chinese Community」から転載したもので、著者はLei Geです。この記事を転載する場合は、Java Chinese Community 公式アカウントにお問い合わせください。 この記事は、https://github.com/vipstone/algorithm の「アルゴリズム グラフィックス」シリーズに含まれています。 キューとスタックは、コンピューターの 2 つの非常に重要なデータ構造です。以前の研究 (「キュー」、「スタック」) により、それぞれの特性がわかっています。キューは先入れ先出し (FIFO) で、スタックは先入れ後出し (FILO) です。では、スタックを使用してキューを実装するにはどうすればよいでしょうか。これは面接でよく聞かれる質問なので、この記事で実装してみましょう。 正式に始める前に、スタックとキューの一般的なメソッドを確認しましょう。 スタックの一般的な方法は次のとおりです。
キューの一般的な方法は次のとおりです。
これらの前提知識を踏まえて、今日のトピックを見てみましょう。 タイトル説明 2 つのスタックを使用してキューを実装します。キューの宣言は次のとおりです。キューの末尾に整数を挿入し、キューの先頭から整数を削除するには、appendTail と deleteHead という 2 つの関数を実装してください。キューに要素がない場合、deleteHead 操作は -1 を返します。 例1:
例2:
ヒント:
問題解決 この問題の意味は実は非常に分かりやすく、先入後出スタックを先入先出キューに変更することです。実際、この問題には「2 つのスタックを使用してキューを実装する」というヒントも示されています。この問題の核となる考え方は、「2 つの負の数は 1 つの正の数に等しい」というものです。まずスタックを使用して要素を格納し (最初に入力された要素はスタックの一番下にあります)、次に最初のスタック内の要素を新しいスタックに移動します。このとき、最初に入力された要素はスタックの一番上にあります。次に、2 番目のスタックを使用して要素をポップすると、全体の実行順序は先入れ先出しになります。 次に、グラフィカルなアプローチを使用してプロセス全体を実装します。 ステップ1 まず、次の図に示すように、要素を最初のスタックにプッシュします。 ステップ2 次に示すように、最初のスタック内のすべての要素を 2 番目のスタックに移動します。 ステップ3 以下に示すように、すべての要素が 2 番目のスタックからポップされます。 まとめ 上の図からわかるように、要素が追加される順序は 1、2、3 であり、2 つのスタックを通過した後でポップされる順序も 1、2、3 です。このようにして、2 つのスタックを介したキュー (先入れ先出し) を実装しました。 実装コード 次に、コードを使用して上記のアイデアを実装します。
上記のテストコードをLeetCodeで送信すると、実行結果は次のようになります。 予防 実装プロセス全体において、特別な注意が必要な 2 つの小さな詳細があります。 最初のスタックはプッシュ(一時的なデータ保存)のみを担当し、2 番目のスタックはポップ(最終的なキュー実行順序)のみを担当します。 スタック 2 がポップされるたびに、スタック 1 から新しいデータを追加 (追加) する前に、すべての要素をポップする必要があります。スタック 2 のすべてのデータがポップされていない場合、スタック 1 の要素をスタック 2 にプッシュすることができず、要素の実行順序が乱れることになります。 要約する この記事では、2 つの先入後出スタックと「負は正に等しい」という考え方を使用して、キューの先入先出機能を実装します。ただし、ポップ コンテナーである 2 番目のスタックが空でない場合は、プログラムの実行順序の混乱を避けるために、最初のスタックの要素を 2 番目のスタックに追加できないことに注意してください。 オリジナルリンク: https://mp.weixin.qq.com/s/18GdYCCaaltx4ZMVkPsptg |
<<: 人工知能はビッグデータの保存と管理の効率をどのように向上させるのでしょうか?
>>: ああはは、それだ!人気の機械学習アルゴリズムの 4 つの「なるほど!」という瞬間
ドローンはまもなく、タイレノールとバンドエイドが詰まった小型容器を積んでダラス・フォートワース上空を...
AI ツールの導入はほとんどの組織がセキュリティを確保できるよりも速いペースで進んでいるため、シャド...
組織は、全員を関与させれば、AI を活用してビジネスを成長させることができます。人工知能への投資は、...
[[413351]] UDPとTCPの違い前回の記事では、TCP の接続を確立するための 3 ウェイ...
AI は驚異的な進歩を遂げていますが、多くの分野ではまだ限界があります。たとえば、コンピューター ゲ...
[[251517]] 12月4日(浙江オンライン記者曽福全)このほど杭州で開催された浙江脳画像サミ...
チップ不足と疫病の影響により、今年初めから自動運転産業の発展は減速を余儀なくされたが、数ヶ月の回復期...
[[243197]]人工知能とは何ですか?人工知能の定義は、「人工知能」と「知能」の 2 つの部分に...
「xAIの目標は、宇宙を理解することを主な目的とする、真のAGI(人工汎用知能)を構築することです」...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
[[228280]]画像出典: Visual Chinaもし人工知能がゆっくりと「感情を理解し」、...
この機械学習チュートリアルでは、機械学習の基本および中級の概念について説明します。初心者の学生と働く...