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)。

浙公网安备 33010602011771号