news 2026/6/10 18:25:30

贪心(七)2054. 两个最好的不重叠活动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心(七)2054. 两个最好的不重叠活动

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 。

实现一个结构体event,分别存放每个时间戳,不管是开始时间还是结束时间,以及这段时间的val,并使用_op字段表示 这个时间戳是开始为0,还是结束为1.

将所有的时间戳放入vector<event> evs数组中,使用sort按照时间戳和_op进行升序排序

使用如下的sort函数进行比较

也可以使用lambda表达式进行比较

用best_first来记录当前遇到的最大的值,当遇到一个结束时间戳时,就使用当前的val来不断维护一个最大的best_first值

当遇到一个开始时间时,用当前遇到的val+之前的最大值best_first来维护一个最大的结果res值

sort(evs.begin(), evs.end(), [](const event& left, const event& right) { if (left._time != right._time) return left._time < right._time; if (left._op != right._op) return left._op < right._op; return left._val < right._val; });
struct event { int _time; int _op; int _val; event(int time, int op, int val) : _time(time) , _op(op) , _val(val) {} bool operator<(event& evt) // 类内进行比较需要重载<的比较方式 { // sort(evs.begin(),evs.end()) // 函数内部自己会调用<重载来构建 if(_time != evt._time) return _time < evt._time; else return _op < evt._op; } }; class Com1 // 类外传递Com()的比较方式 { public: bool operator()(event&left, event&right) { if(left._time != right._time) return left._time < right._time; else return left._op < right._op; } }; class Com2 // 使用 std::tie 实现简洁正确的比较 { // std::tie 会自动创建元组进行比较,完全符合严格弱序要求。 public: bool operator()(event&left, event&right) { return std::tie(left._time, left._op) < std::tie(right._time, right._op); } }; class Solution { public: int maxTwoEvents(vector<vector<int>>& events) { vector<event> evs; for(auto & e : events) { evs.emplace_back(e[0], 0, e[2]); evs.emplace_back(e[1], 1, e[2]); } sort(evs.begin(), evs.end(), Com2()); int res = 0, best_first = 0; for(auto &e : evs) { if(e._op == 0) { res = max(res, e._val + best_first); } else { best_first = max(best_first, e._val); } } return res; } };

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 1:12:42

探寻当代顶尖堪舆大师:甄别真才实学之法

探寻当代顶尖堪舆大师&#xff1a;甄别真才实学之法在当下&#xff0c;若你不懂堪舆&#xff0c;面临重要抉择时&#xff0c;自然想寻得一位顶尖的周易玄学、易经命理堪舆大师来助力选择与安排堪舆布局。然而&#xff0c;如何找到有真本事的堪舆师&#xff0c;怎样请到著名堪舆…

作者头像 李华
网站建设 2026/6/3 0:41:35

2025信创标杆:嘉为蓝鲸全栈智能可观测中心,重塑企业运维新生态

2025 年&#xff0c;信创产业全面进入规模化落地阶段&#xff0c;混合云架构、云原生转型与国产化替代成为企业 IT 建设的核心命题。传统运维监控工具面临 “数据孤岛、告警风暴、信创适配不足” 的三重挑战&#xff0c;难以支撑企业数字化转型的深度需求。作为智能运维领域唯一…

作者头像 李华
网站建设 2026/6/10 1:05:41

ESP-DL是什么?乐鑫官方的ESP32嵌入式深度学习工具库

在人工智能与物联网深度融合的当下&#xff0c;将AI能力部署至资源受限的嵌入式终端已成为关键挑战。为此&#xff0c;乐鑫科技推出了ESP-DL&#xff0c;一个专为其ESP32、ESP32-S2、ESP32-S3及ESP32-C3系列芯片设计的高性能深度学习开发库。它通过提供丰富的应用程序接口&…

作者头像 李华
网站建设 2026/6/10 16:56:30

2025CRM选型:从单点到协同的 5 大品牌 7 模块解析

随着企业数字化转型进入深水区&#xff0c;CRM已从“客户跟进工具”进化为“全链路业务协同平台”。企业需要的不再是单一的销售管理&#xff0c;而是覆盖客户-销售-进销存-财务-生产-协同的一体化解决方案。本文选取超兔一体云&#xff08;国内全模块SaaS&#xff09;、Salesf…

作者头像 李华
网站建设 2026/5/30 6:58:05

鸿蒙生态高级实战:多端协同与智联设备联动开发

&#x1f517; 鸿蒙生态高级实战&#xff1a;多端协同与智联设备联动开发 一、章节概述 ✅ 学习目标 掌握鸿蒙**超级终端&#xff08;Super Device&#xff09;**的组队与任务流转逻辑熟练对接**HarmonyOS Connect&#xff08;鸿蒙智联&#xff09;**智能硬件设备实现手机/平板…

作者头像 李华
网站建设 2026/6/5 23:45:59

区块链Web3 项目的运营

国内 Web3 项目的运营环境呈现出“强监管与数实融合”的鲜明特征。由于国内严禁虚拟货币交易&#xff0c;运营的核心逻辑已从国际主流的“代币经济&#xff08;Tokenomics&#xff09;”转向了“价值权益与场景赋能”。以下是国内区块链 Web3 项目运营的系统化策略&#xff0c;…

作者头像 李华