news 2026/6/9 21:19:36

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/6/9 17:27:07

MANO手部模型实战指南:从零构建逼真3D手势交互系统

MANO手部模型实战指南&#xff1a;从零构建逼真3D手势交互系统 【免费下载链接】MANO A PyTorch Implementation of MANO hand model. 项目地址: https://gitcode.com/gh_mirrors/ma/MANO 想要快速掌握3D手部建模的核心技术吗&#xff1f;MANO&#xff08;Mesh-based An…

作者头像 李华
网站建设 2026/6/9 17:28:24

手把手教程:如何判断移动设备采用arm架构或x86架构

如何一眼看穿你的手机用的是 ARM 还是 x86&#xff1f;实战全解析你有没有遇到过这样的情况&#xff1a;一个 APK 在模拟器上跑得好好的&#xff0c;一装到真机就闪退&#xff1b;或者某个第三方 SDK 死活加载不了 so 库&#xff0c;报UnsatisfiedLinkError&#xff1b;甚至 CI…

作者头像 李华
网站建设 2026/6/9 17:26:49

3分钟掌握KityMinder:这款免费的在线思维导图工具让你效率翻倍

3分钟掌握KityMinder&#xff1a;这款免费的在线思维导图工具让你效率翻倍 【免费下载链接】kityminder-editor Powerful Mindmap Editing Tool 项目地址: https://gitcode.com/gh_mirrors/ki/kityminder-editor KityMinder是一款功能强大的在线思维导图工具&#xff0c…

作者头像 李华
网站建设 2026/6/5 11:00:56

极致CMS建站实战指南:从痛点分析到企业级部署进阶

极致CMS建站实战指南&#xff1a;从痛点分析到企业级部署进阶 【免费下载链接】jizhicms 极致CMS&#xff08;以下简称:JIZHICMS&#xff09;是一款开源免费&#xff0c;无商业授权的建站系统。 项目地址: https://gitcode.com/gh_mirrors/ji/jizhicms 还在为网站建设的…

作者头像 李华
网站建设 2026/6/9 18:41:11

轻松伪装硬件信息:EASY-HWID-SPOOFER完全使用手册

轻松伪装硬件信息&#xff1a;EASY-HWID-SPOOFER完全使用手册 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 还在担心你的硬件信息被追踪吗&#xff1f;EASY-HWID-SPOOFER这款强大…

作者头像 李华
网站建设 2026/6/9 20:10:29

【含文档+PPT+源码】基于SpringBoot+Vue的高校学科竞赛报名和成绩管理系统

选题的背景高校学科竞赛越来越多&#xff0c;竞赛活动的组织方法变得越发重要起来&#xff0c;传统的报名与成绩管理方式已不能满足现代化、高效化的要求[1]&#xff0c;纸质版报名表填写以及人工录入成绩既低效又容易出错漏掉信息[2]。而且学生对于获取竞赛信息及报名流程便捷…

作者头像 李华