862。合計が少なくとも K
である最短の部分配列難易度: 難しい
トピック: 配列、二分探索、キュー、スライディング ウィンドウ、ヒープ (優先キュー)、プレフィックス合計、モノトニック キュー
整数配列 nums と整数 k を指定すると、合計が少なくとも k である nums の空ではない最短の 部分配列 の長さを返します。そのような サブ配列 がない場合は、-1 を返します。
サブ配列は、配列の連続した部分です。
例 1:
例 2:
例 3:
制約:
解決策:
プレフィックス合計と単調キューを組み合わせたスライディング ウィンドウ アプローチを使用する必要があります。段階的なアプローチは次のとおりです:手順:
プレフィックス合計:
モノトニックキュー:
スライディング ウィンドウ ロジック:
このソリューションを PHP で実装してみましょう: 862。合計が少なくとも K
である最短の部分配列
説明:
プレフィックス合計配列:
- 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 を返します。それ以外の場合は、サブ配列の最小長を返します。
時間計算量:
このアプローチにより、入力が大きい場合でもソリューションが効率的に実行されます。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が。合計が少なくとも K である最短のサブ配列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。