ホームページ >バックエンド開発 >PHPチュートリアル >連続サブアレイ
2762。連続部分配列
難易度: 中
トピック: スライディング ウィンドウ、配列、順序付きセット、ヒープ (優先キュー)、キュー、モノトニック キュー、2 ポインター、順序付きマップ、ハッシュ テーブル、動的プログラミング、カウンティング、数学、二分探索ツリー、セグメントツリー、ツリー、スタック、二分探索、単調スタック、メモ化、イテレータ、貪欲、深さ優先検索、再帰
0 からインデックス付けされた 整数配列 nums が与えられます。次の場合、nums の部分配列は連続と呼ばれます。
連続する部分配列の合計数を返します。
サブ配列は、配列内の要素の連続した 空でない シーケンスです。
例 1:
例 2:
制約:
ヒント:
解決策:
スライディング ウィンドウ手法を使用して、連続部分配列の数を効率的に計算できます。部分配列内の最大値と最小値の差が最大 2 である有効なウィンドウを維持します。現在のウィンドウ内の最大値と最小値を効率的に追跡するには、2 つの デキュー (1 つは1 つは最大値、1 つは最小値です)。
このソリューションを PHP で実装してみましょう: 2762。連続部分配列
<?php /** * @param Integer[] $nums * @return Integer */ function continuousSubarrays($nums) { ... ... ... /** * go to ./solution.php */ } // Example usage $nums1 = [5, 4, 2, 4]; echo continuousSubarrays($nums1) . "\n"; // Output: 8 $nums2 = [1, 2, 3]; echo continuousSubarrays($nums2) . "\n"; // Output: 6 ?>
スライディング ウィンドウ:
左ポインタは、ウィンドウが無効になった場合(つまり、最大値と最小値の差が 2 を超えた場合)にのみ前に移動します。右ポインタは、配列を反復処理してウィンドウを拡張します。
最大値と最小値のデック:
サブ配列のカウント:
左から右へのすべてのサブ配列が有効であるため、右ごとに、右で終わる有効なサブ配列の数は (右 - 左 1) に等しくなります。
効率:
各要素は両端キューに追加および削除されるのは最大 1 回であるため、時間計算量は O(n) になります。デキューのため、スペースの複雑さは O(n) です。
8 6
時間計算量:
空間の複雑さ:
この実装は効率的であり、指定された制約内で動作します。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が連続サブアレイの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。