2054. 两个最好的不重叠活动
一、题目
给你一个下标从 0 开始的二维整数数组 events
,其中 events[i] = [startTimei, endTimei, valuei]
。第 i
个活动开始于 startTimei
,结束于 endTimei
,如果你参加这个活动,那么你可以得到价值 valuei
。你 最多 可以参加 两个时间不重叠 活动,使得它们的价值之和 最大 。
请你返回价值之和的 最大值 。
二、思路
if (op == 0) { ans = max(ans, val + bestFirst); } else { bestFirst = max(bestFirst, val); }
三、代码
impl Solution { pub fn max_two_events(events: Vec<Vec<i32>>) -> i32 { let mut vec = Vec::new(); for v in events.into_iter(){ vec.push((v[0],0,v[2])); vec.push((v[1],1,v[2])); } vec.sort(); let mut two_sum=0; let mut one_best=0; use core::cmp::max; for name in vec.into_iter(){ match name{ (_,0,val)=>two_sum=max(two_sum,one_best+val), (_,1,val)=>one_best=max(one_best,val), _=>println!("jjj"), } } two_sum } }
四、分析
复杂度分析
时间复杂度:如果堆排序,O(nlogn),其中 n 是数组 events 的长度。
空间复杂度:O(n)。
分类:
课程 / 题 / 贪心
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了