news 2026/3/4 9:53:10

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/3/3 17:53:48

Android USB OTG相机终极指南:轻松连接外接相机到手机

想要将普通USB相机连接到Android手机吗&#xff1f;Android USB OTG相机项目让这一切变得简单&#xff01;本教程将手把手教你如何快速实现USB相机连接&#xff0c;让你在手机上也能享受专业相机功能。&#x1f3af; 【免费下载链接】Android-USB-OTG-Camera 项目地址: http…

作者头像 李华
网站建设 2026/3/3 9:49:15

基于数据加密的仓库货物管理系统设计与实现开题报告

选 题 的 背 景 、 目 的 和 意 义 一、选题背景 &#xff08;1&#xff09;研究背景 随着物流行业的快速发展和企业规模的扩大&#xff0c;仓库货物管理变得越来越复杂和重要。传统的手工管理方式不仅效率低下&#xff0c;而且容易出现人为错误&#xff0c;导致货物丢失、错发…

作者头像 李华
网站建设 2026/3/4 5:11:06

基恩士PLC KV-Nano系列顺序控制----(步序不用定时器写法)

一般写基恩士PLC程序&#xff0c;每一步都是用定时器做延时&#xff0c;才跳转到下一步&#xff0c;如果定时器不够用&#xff0c;就比较麻烦&#xff0c;所以用此方法&#xff0c;来写步序控制&#xff0c;非常方便。 //----------------------------------------------------…

作者头像 李华
网站建设 2026/3/4 9:38:17

19、BizTalk Server 2010解决方案的部署、跟踪与管理

BizTalk Server 2010解决方案的部署、跟踪与管理 1. 通过MSI包进行示例部署 当需要将应用程序部署到不同环境时,会有一个包含多个绑定文件的MSI包。为了便于操作,我们假设将MSI包部署到测试环境,在提示时使用测试绑定文件。为简化操作,我们将复用现有的BizTalk环境并删除…

作者头像 李华
网站建设 2026/3/2 3:21:18

20、BizTalk Server 2010 解决方案的部署、跟踪和管理

BizTalk Server 2010 解决方案的部署、跟踪和管理 1. BizTalk Group Hub 概述 BizTalk Group Hub 包含以下六个核心部分: - 配置概述 - 正在进行的工作 - 挂起项 - 分组的服务实例 - 跟踪的服务实例 - 跟踪的消息事件 当测试 BizTalk 应用程序未得到预期结果时,BizT…

作者头像 李华
网站建设 2026/2/28 19:27:53

28、Azure BizTalk 服务使用指南

Azure BizTalk 服务使用指南 项目配置与文件传输测试 首先进行项目的基础配置和文件传输的初步测试。操作步骤如下: 点击桥接器,选择路由排序表属性。 确保 MySimpleSecondFTPDest 在表中排在首位,以便优先评估。 构建项目。 在 PowerShell 中停止源。 重新部署项目…

作者头像 李华