2054年。重複しないベスト 2 つのイベント
難易度: 中
トピック: 配列、二分探索、動的プログラミング、ソート、ヒープ (優先キュー)
イベントの 0 インデックス付き 2D 整数配列が与えられます。ここで、 events[i] = [startTimei、endTimei、value私]。 i番目イベントはstartTimeiに始まりendTimeiに終了します。このイベントに参加すると、valueiの値を受け取ります。 。 重複しない最大 2 つのイベントを選択して、それらの値の合計が最大化されるようにすることができます。
この最大の合計を返します。
開始時間と終了時間は包括的であることに注意してください。つまり、一方が開始し、他方が同時に終了する 2 つのイベントに参加することはできません。具体的には、終了時刻が t のイベントに参加した場合、次のイベントは t 1 以降に開始する必要があります。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
次のアプローチを使用できます:
イベントを終了時間で並べ替えます
:重複しないイベントの二分探索
:<🎜>最大トラッキングを使用した動的プログラミング:
最大合計を反復して計算します:
このソリューションを PHP で実装してみましょう: 2054。重複しないベスト 2 つのイベント
説明:
並べ替え:
- イベントは終了時刻によって並べ替えられるため、重複しない最後のイベントを効率的に検索できます。
二分探索:
- 各イベントについて、二分探索により、現在のイベントが開始する前に終了する最新のイベントが特定されます。
最大追跡:
- 現在のインデックスまでのイベントの最大値を格納する配列 maxUpTo を維持します。これにより、以前のインデックスの最大値の再計算が回避されます。
最大合計の計算:
- 各イベントについて、その値と重複しない最良のイベントの値の合計を計算します。それに応じてグローバル最大合計を更新します。
複雑さの分析
このソリューションは効率的であり、制約内でうまく機能します。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が重複しないイベントのベスト 2 つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。