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中文网其他相关文章!