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(nlog⁡n),其中 n 是数组 events 的长度。

空间复杂度:O(n)。

 

posted @ 2023-04-13 23:17  ImreW  阅读(30)  评论(0)    收藏  举报