当前位置: 首页 > news >正文

贪心(七)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; } };

http://www.jsqmd.com/news/130021/

相关文章:

  • 大文件上传面试回答要点
  • 管道漏液跑冒滴漏识别摄像机 筑牢管道防线
  • 2026北京清美校考画室TOP5权威测评:卓桥艺考实力领衔,助你精准避坑选择 - 博客万
  • 【万字长文】深入解析LLM大模型:预训练到RLHF全流程一网打尽!
  • 视频号直播怎么搭配提词器使用?全流程新手攻略
  • 真空发生器哪家好?2025真空发生器生产厂家好评红榜 - 栗子测评
  • 2025年编程界必备:大模型优化技术全攻略!Prompt工程+RAG+微调,立即掌握,职业发展加速!
  • 百考通AI:您的智能数据分析专家,让数据说话,让决策有据!
  • 揭秘AI时代产品经理的薪资差距:15K与25K的真正区别,从功能落地到架构模型,突破职业瓶颈的关键策略!
  • 打工人年底必须知道的知识!十三薪vs年终奖
  • 百考通AI:告别“凑字数”烦恼,一键生成专业实践报告,让实习成果闪闪发光!
  • OpenAI最新发布,企业级AI智能体的强化微调实践
  • 2025CRM选型:从单点到协同的 5 大品牌 7 模块解析
  • 百考通AI:告别“开题焦虑”,一键生成专业任务书,让科研之路从第一步就赢在起跑线!
  • 怎么在windows上给文件夹添加comment注释
  • ESP-DL是什么?乐鑫官方的ESP32嵌入式深度学习工具库
  • 2025年12月23日--rabbitMQ的使用
  • 5个常见问题解决:YashanDB部署指南
  • 在Go架构设计中引入Java业务链及调度思想
  • 速看!深圳靠谱闪测仪厂家,高精度工业测量解决方案 - yilen
  • anything-llm镜像是否支持GraphQL接口?
  • 2025年12月塑料敞口塑料圆桶,酸泡菜腌制塑料圆桶,养殖塑料圆桶厂家推荐:行业测评与选择指南 - 品牌鉴赏师
  • 2025年12月云母制品厂家实力榜:恒温云母发热板、异形云母发热板、合成云母带、耐火云母带、耐高温云母带、云母板、云母带等细分品类企业凭全链布局与品质出圈 - 海棠依旧大
  • 物联网虫情测报灯
  • 2025最新硬核突围!垃圾分类/分选设备TOP5先锋榜,标杆力量引领绿色转型 - 深度智识库
  • 2025年温州包装盒源头工厂最新推荐:食品包装盒定做/鞋盒包装/包装礼盒定制/飞机盒定制/ 农产品礼盒厂家选择指南 - 栗子测评
  • 视频汇聚融合平台Liveweb核心能力解析与多场景应用实践
  • 2025年12月2吨加药箱,1.5吨加药箱,加药装置厂家推荐:行业测评与选择指南 - 品牌鉴赏师
  • 环印机公司哪家强?2025最新口碑排行揭晓,行业内口碑好的环印机厂家优质企业盘点及核心优势详细解读 - 品牌推荐师
  • 自主机器人助力工业检测与减排技术解析