Advanced Binary Scharch の使用方法

王林
リリース: 2024-08-31 18:30:37
オリジナル
201 人が閲覧しました

How to use Advanced Binary Scarch ?

なぜ、どのようにして?

私が leetcode の質問を解いている間に、降順ではない整数の指定された配列で、指定されたターゲット値の開始位置と終了位置を見つけます。そのため、単純なバイナリ スカーチでは、配列内のターゲット要素の開始と終了を返すことは不可能でした。これは、最初のターゲット要素が見つかったインデックスのみを返すためであり、その要素の first 、 end 、または middle のいずれかになる可能性があります。そこで Double Binary Scharch を使用します。その方法は次のとおりです...

アプローチ

  1. 最初の二分探索:

    • バイナリ検索を実行して、ターゲットの最後の出現を見つけます。
    • si (開始インデックス) は 0、ei (終了インデックス) は nums.length - 1 で始まります。
    • 中央の要素 nums[mid] がターゲットより小さい場合、開始インデックス si をmid + 1 に移動して、右半分を検索します。
    • 目標より大きい場合は、終了インデックス ei を Mid - 1 に移動して左半分を検索します。
    • nums[mid] がターゲットと等しい場合、res[1] をmid (範囲の現在の終わり) に設定し、右半分 (si = Mid + 1) で検索を続けて最後の出現箇所を見つけます。
  2. 2 番目の二分探索:

    • 別の二分探索を実行して、ターゲットの最初の出現を見つけます。
    • si を 0 にリセットし、ei を nums.length - 1 にリセットします。
    • 前と同様のアプローチに従いますが、nums[mid] がターゲットと等しい場合は、res[0] をmid (範囲の現在の開始点) に設定し、左半分 (ei = mid - 1) で検索を続けます。最初の出現箇所を見つけます。
  3. 結果を返す:

    • 結果配列 res には、ターゲット値の開始インデックスと終了インデックスが含まれます。

複雑

  • 時間計算量:

    • 最初と最後の出現の二分探索にはそれぞれ O(log n) 時間がかかります。 2 つのバイナリ検索を実行するため、全体の時間計算量は O(log n) です。
  • 空間の複雑さ:

    • 変数に固定量の追加スペースを使用しているため、O(1)。

コード

リーリー

以上がAdvanced Binary Scharch の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!