news 2026/5/1 6:56:25

LeetCode 2054.两个最好的不重叠活动:二分查找

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 2054.两个最好的不重叠活动:二分查找

【LetMeFly】2054.两个最好的不重叠活动:二分查找

力扣题目链接:https://leetcode.cn/problems/two-best-non-overlapping-events/

给你一个下标从0开始的二维整数数组events,其中events[i] = [startTimei, endTimei, valuei]。第i个活动开始于startTimei,结束于endTimei,如果你参加这个活动,那么你可以得到价值valuei。你最多可以参加两个时间不重叠活动,使得它们的价值之和最大

请你返回价值之和的最大值

注意,活动的开始时间和结束时间是包括在活动时间内的,也就是说,你不能参加两个活动且它们之一的开始时间等于另一个活动的结束时间。更具体的,如果你参加一个活动,且结束时间为t,那么下一个活动必须在t + 1或之后的时间开始。

示例 1:

输入:events = [[1,3,2],[4,5,2],[2,4,3]]输出:4解释:选择绿色的活动 0 和 1 ,价值之和为 2 + 2 = 4 。

示例 2:

输入:events = [[1,3,2],[4,5,2],[1,5,5]]输出:5解释:选择活动 2 ,价值和为 5 。

示例 3:

输入:events = [[1,5,3],[1,5,1],[6,6,5]]输出:8解释:选择活动 0 和 2 ,价值之和为 3 + 5 = 8 。

提示:

  • 2 <= events.length <= 105
  • events[i].length == 3
  • 1 <= startTimei<= endTimei<= 109
  • 1 <= valuei<= 106

解题方法:二分查找

如果只能选一个event,那么好说,哪个价值大选哪个;如果一定要选两个event,假设第二个event选事件e,那么第一个event一定要选结束时间早于e开始时间的所有事件中价值最大的那个。

很显然,为了枚举第一个event的可选范围,可以以结束时间为依据对所有event按从小到大排个序。

接着使用一个(有序)数组maxValue,数组中存放的内容是:到xx时刻为止,单个event的最大价值是多少。排序依据是结束时间。

遍历所有事件,对于某事件e,二分查找maxValue中小于e开始时间中最大的那个,其值加上e的价值即为第二个event选e情况下的最优解。之后更新e结束时间的单个事件最大值。

  • 时间复杂度O ( n log ⁡ n ) O(n\log n)O(nlogn),其中n = l e n ( e v e n t s ) n=len(events)n=len(events)
  • 空间复杂度O ( n ) O(n)O(n)

AC代码

C++
/* * @LastEditTime: 2025-12-23 18:58:01 */classSolution{public:intmaxTwoEvents(vector<vector<int>>&events){sort(events.begin(),events.end(),[](constvector<int>&a,constvector<int>&b){returna[1]<b[1];});vector<pair<int,int>>maxValue;intsingleMax=0,pairMax=0;for(vector<int>&e:events){vector<pair<int,int>>::iterator it=lower_bound(maxValue.begin(),maxValue.end(),e[0],[](constpair<int,int>&p,intvalue){returnp.first<value;});if(it!=maxValue.begin()){pairMax=max(pairMax,(--it)->second+e[2]);}singleMax=max(singleMax,e[2]);maxValue.push_back({e[1],singleMax});}returnmax(pairMax,singleMax);}};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:47:16

KiCad类模块化布局的实践应用解析

KiCad 类模块化布局&#xff1a;从工程痛点出发的实战设计之道你有没有遇到过这样的场景&#xff1f;一个原本计划三周完成的工业控制板项目&#xff0c;到了最后两周才发现电源噪声干扰严重&#xff0c;排查半天发现是某个传感器模块的地线被错误地穿过了高速信号区&#xff1…

作者头像 李华
网站建设 2026/5/1 5:48:36

Lua-HTTP完全指南:从入门到精通的5个关键步骤

Lua-HTTP完全指南&#xff1a;从入门到精通的5个关键步骤 【免费下载链接】lua-http HTTP Library for Lua. Supports HTTP(S) 1.0, 1.1 and 2.0; client and server. 项目地址: https://gitcode.com/gh_mirrors/lu/lua-http Lua-HTTP是一个专为Lua 5.1、5.2、5.3、5.4和…

作者头像 李华
网站建设 2026/5/1 6:16:49

终极XPath Helper Plus使用指南:快速定位网页元素的完整教程

终极XPath Helper Plus使用指南&#xff1a;快速定位网页元素的完整教程 【免费下载链接】xpath-helper-plus 项目地址: https://gitcode.com/gh_mirrors/xp/xpath-helper-plus XPath Helper Plus 是一款专为Web开发者和测试工程师设计的强大浏览器扩展工具&#xff0c…

作者头像 李华
网站建设 2026/4/25 14:45:08

5分钟快速上手Blinker:打造你的第一个智能家居项目

5分钟快速上手Blinker&#xff1a;打造你的第一个智能家居项目 【免费下载链接】blinker-library An IoT Solution,Blinker library for embedded hardware. Works with Arduino, ESP8266, ESP32. 项目地址: https://gitcode.com/gh_mirrors/bl/blinker-library 还在为物…

作者头像 李华
网站建设 2026/4/25 8:36:36

Maye快速启动:彻底告别Windows桌面混乱的终极解决方案

Maye快速启动&#xff1a;彻底告别Windows桌面混乱的终极解决方案 【免费下载链接】Maya Maye 一个简洁小巧的快速启动工具 项目地址: https://gitcode.com/gh_mirrors/maya/Maya 你是否也曾为桌面上密密麻麻的图标而烦恼&#xff1f;每次打开程序都要在图标海洋中苦苦寻…

作者头像 李华
网站建设 2026/5/1 5:12:02

SilentPatch终极指南:彻底解决《恶霸鲁尼》Windows 10崩溃问题

SilentPatch终极指南&#xff1a;彻底解决《恶霸鲁尼》Windows 10崩溃问题 【免费下载链接】SilentPatchBully SilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10) 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully 还在为《恶霸…

作者头像 李华