862。合計が少なくとも K
である最短の部分配列難易度: 難しい
トピック: 配列、二分探索、キュー、スライディング ウィンドウ、ヒープ (優先キュー)、プレフィックス合計、モノトニック キュー
整数配列 nums と整数 k を指定すると、合計が少なくとも k である nums の空ではない最短の 部分配列 の長さを返します。そのような サブ配列 がない場合は、-1 を返します。
サブ配列は、配列の連続した部分です。
例 1:
- 入力: nums = [1]、k = 1
- 出力: 1
例 2:
- 入力: nums = [1,2]、k = 4
- 出力: -1
例 3:
- 入力: nums = [2,-1,2]、k = 3
- 出力: 3
制約:
- 1 5
-10
- 5 5 1 9
解決策:
プレフィックス合計と単調キューを組み合わせたスライディング ウィンドウ アプローチを使用する必要があります。段階的なアプローチは次のとおりです:手順:
-
プレフィックス合計:
- まず、プレフィックス合計配列を計算します。ここで、インデックス i の各要素は、配列の先頭から i までの要素の合計を表します。接頭辞の合計を使用すると、任意の部分配列の合計を定数時間で計算できます。
-
モノトニックキュー:
- deque (両端キュー) を使用して、prefix_sum 配列のインデックスを維持します。デキューは、プレフィックス合計の昇順で維持されます。
- これは、現在のプレフィックスの合計を以前のプレフィックスの合計と比較することにより、合計が k 以上である部分配列を効率的に見つけるのに役立ちます。
-
スライディング ウィンドウ ロジック:
- 各インデックス i について、現在のプレフィックス合計と以前のプレフィックス合計 (両端キューに格納されている) の差が k 以上であるかどうかを確認します。
- その場合、部分配列の長さを計算し、必要に応じて最小長を更新します。
アルゴリズム:
- prefix_sum 配列をサイズ n 1 で初期化します (n は入力配列の長さです)。ゼロ要素の合計は 0 であるため、最初の要素は 0 です。
- 両端キューを使用して、prefix_sum 値のインデックスを保存します。デキューは、条件を満たす最短のサブ配列を効率的に見つけるのに役立ちます。
- 配列内の各要素について、prefix_sum を更新し、両端キューをチェックして、合計が k 以上の最小の部分配列を見つけます。
このソリューションを PHP で実装してみましょう: 862。合計が少なくとも K
である最短の部分配列
<?php /** * @param Integer[] $nums * @param Integer $k * @return Integer */ function shortestSubarray($nums, $k) { ... ... ... /** * go to ./solution.php */ } // Example usage: $nums1 = [1]; $k1 = 1; echo shortestSubarray($nums1, $k1) . "\n"; // Output: 1 $nums2 = [1, 2]; $k2 = 4; echo shortestSubarray($nums2, $k2) . "\n"; // Output: -1 $nums3 = [2, -1, 2]; $k3 = 3; echo shortestSubarray($nums3, $k3) . "\n"; // Output: 3 ?>
説明:
-
プレフィックス合計配列:
- prefix_sum 配列内の配列の累積合計を計算します。これは、式 prefix_sum[j 1] - prefix_sum[i]. を使用して、サブ配列 nums[i...j] の合計を計算するのに役立ちます。
-
モノトニックキュー:
- 両端キューは、prefix_sum 配列のインデックスを値の昇順に保持します。この順序を維持することで、合計が k 以上である最小の部分配列を効率的に見つけることができます。
-
スライディング ウィンドウ ロジック:
- prefix_sum 配列をたどるときに、現在の prefix_sum[i] と前の prefix_sum[deque[0]] の差を使用して最小の部分配列を見つけようとします。
- 差が k 以上の場合、部分配列の長さを計算し、見つかった最小の長さを更新します。
-
返される結果:
- 有効な部分配列が見つからない場合は、-1 を返します。それ以外の場合は、サブ配列の最小長を返します。
時間計算量:
- 時間計算量: O(n)、n は入力配列の長さです。各要素は最大 2 回処理されます (両端キューに追加されるときに 1 回、削除されるときに 1 回)。
- 空間の複雑さ: prefix_sum 配列とインデックスの格納に使用される両端キューにより O(n)。
このアプローチにより、入力が大きい場合でもソリューションが効率的に実行されます。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
- GitHub
以上が。合計が少なくとも K である最短のサブ配列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
