news 2026/9/24 14:41:38

leetcode 2054. 两个最好的不重叠活动 中等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 2054. 两个最好的不重叠活动 中等

给你一个下标从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 <= 10^5
  • events[i].length == 3
  • 1 <= startTimei <= endTimei <= 10^9
  • 1 <= valuei <= 10^6

分析:设取的第二个活动开始时间为 startTime,则问题转化为:遍历所有活动(作为取的第二个活动),如何取第一个活动使得参加的两个活动价值最大。

按照结束时间从小到大排序后,假设有如下两个活动:活动 A 结束于 3 时刻,价值 999。活动 B 结束于 6 时刻,价值 9。因为我们已经取了要参加的第二个活动,所以对于上面的这两个活动不关心开始时间。很明显,活动 B 是没有意义的,因为它的结束时间更晚,而价值更低。对于同样的第二个活动开始时间,取活动 A 作为第一个活动是更优的,活动 B 可以完全被活动 A 代替。

可以用一个数组,按照结束时间从小到大,活动价值从小到大记录可选的活动。由于之前已经按照结束时间升序排序,记录时只需要按照活动价值从小到大记录即可,类似于活动 A 和活动 B 的情况,只记录活动 A 即可。

遍历所有活动时,可以对这个记录数组进行二分查找,找到一个价值最大,且结束时间小于开始时间的活动,如果找不到,则当前活动只能单独取。最后取最大值作为答案。

typedef struct node { int endTime,value; }node; int cmp(const void *a,const void *b) { node *aa=(node*)a; node *bb=(node*)b; if(aa->endTime!=bb->endTime)return aa->endTime-bb->endTime; return aa->value-bb->value; } int maxTwoEvents(int** events, int eventsSize, int* eventsColSize) { node num[eventsSize+5],val[eventsSize+5]; for(int i=0;i<eventsSize;++i) num[i].endTime=events[i][1],num[i].value=events[i][2]; qsort(num,eventsSize,sizeof(node),cmp); int cnt=1; val[0].endTime=0,val[0].value=0; for(int i=0;i<eventsSize;++i) if(num[i].value>val[cnt-1].value)val[cnt]=num[i],cnt++; int ans=0; for(int i=0;i<eventsSize;++i) { int l=0,r=cnt,st=events[i][0],temp=events[i][2]; while(l<r) { int mid=(l+r)/2; if(val[mid].endTime<st)temp=val[mid].value+events[i][2],l=mid+1; else r=mid; } ans=fmax(ans,temp); } return ans; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 10:12:27

为什么顶尖团队都在用Open-AutoGLM?背后的技术优势终于曝光

第一章&#xff1a;Open-AutoGLM的起源与核心定位Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;General Language Model, GLM&#xff09;构建框架&#xff0c;旨在降低大模型开发门槛&#xff0c;提升从数据准备到模型部署的全流程效率。其诞生源于对现有NLP工具链…

作者头像 李华
网站建设 2026/9/20 22:39:58

ISTA 1B标准深度解读:大件商品运输包装的“安全通行证”

做大件商品电商、工业设备外贸或大型家电供应链的朋友&#xff0c;大概率都踩过运输破损的坑——一台冰箱运输中磕碰掉漆&#xff0c;一台工业机床减震失效&#xff0c;轻则客户拒收索赔&#xff0c;重则直接造成几千上万元的损失。其实解决这个问题的关键&#xff0c;就是读懂…

作者头像 李华
网站建设 2026/9/23 5:25:37

【Open-AutoGLM高效开发秘籍】:不装这4个插件等于浪费80%性能

第一章&#xff1a;Open-AutoGLM性能瓶颈的根源剖析 在大规模语言模型推理系统中&#xff0c;Open-AutoGLM作为自动化生成与优化推理流程的核心组件&#xff0c;其性能表现直接影响整体系统的响应效率和吞吐能力。尽管架构设计上具备高度模块化与可扩展性&#xff0c;但在实际部…

作者头像 李华
网站建设 2026/9/23 14:59:15

时序数据库选型指南:如何为大数据场景选择合适的时序数据库

引言 在工业物联网、智能制造、能源管理等大数据场景中,时序数据呈现爆炸式增长。如何高效存储、管理和分析这些海量时序数据,成为企业数字化转型的关键挑战。选择一款合适的时序数据库,不仅关系到系统性能,更直接影响企业的存储成本和运维效率。本文将从技术选型的核心维度出…

作者头像 李华
网站建设 2026/9/22 0:51:12

终于有人把知识图谱+LLM融合讲明白了!

介绍 2025最新出版的《Knowledge Graphs and LLMs in Action》是一本关于人工智能技术融合的权威指南。全书聚焦知识图谱与大语言模型的协同应用&#xff0c;探索如何将知识图谱的结构化推理能力与大语言模型的自然语言理解能力结合&#xff0c;构建更强大、可靠且可解释的AI系…

作者头像 李华