2054。兩個最好的不重疊的事件
難度:中
主題:陣列、二分查找、動態規劃、排序、堆疊(優先權佇列)
您將獲得一個0 索引 2D 事件整數數組,其中events[i] = [startTimei, endTimei, value我]。第i第活動從startTimei開始,到endTimei結束,如果您參加本次活動,您將獲得價值valuei 。您可以選擇最多兩個不重疊的活動參加,以使它們的值之和最大化。
返回此最大總和。
請注意,開始時間和結束時間包含:也就是說,您不能參加兩個活動,其中一個活動同時開始,另一個活動同時結束。更具體地說,如果您參加結束時間為 t 的活動,則下一個活動必須在 t 1 或之後開始。
範例1:
範例2:
範例 3:
約束:
提示:
解:
我們可以使用以下方法:
以結束時間對活動進行排序:
非重疊事件的二分搜尋:
使用最大追蹤的動態規劃:
迭代併計算最大值和:
讓我們用 PHP 實作這個解決方案:2054。兩個最佳不重疊事件
<?php /** * @param Integer[][] $events * @return Integer */ function maxTwoEvents($events) { ... ... ... /** * go to ./solution.php */ } // Example Usage: $events1 = [[1, 3, 2], [4, 5, 2], [2, 4, 3]]; $events2 = [[1, 3, 2], [4, 5, 2], [1, 5, 5]]; $events3 = [[1, 5, 3], [1, 5, 1], [6, 6, 5]]; echo maxTwoEvents($events1) . "\n"; // Output: 4 echo maxTwoEvents($events2) . "\n"; // Output: 5 echo maxTwoEvents($events3) . "\n"; // Output: 8 ?>
排序:
二分查找:
最大追蹤:
最大和計算:
這個解決方案非常高效,並且在限制範圍內運作良好。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是兩個最好的不重疊事件的詳細內容。更多資訊請關注PHP中文網其他相關文章!