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 @   ImreW  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示