输入说明

  • n      —— 活动数量

  • s[1…n]  — 第 i 个活动的开始时间 (start)

  • f[1…n]  — 第 i 个活动的结束时间 (finish)

前置要求:数组已按 f 从小到大排好序
(若没排,先调用 sortByFinishTime(),复杂度 O(n log n)


伪代码(逐行注释版)

GreedyActivitySelection(s, f, n)A ← ∅                          // A:最终被选中的活动下标集合// —— 第 1 步:先选最早结束的活动 ——  choose ← 1                     // 已排序后,索引 1 的活动结束最早A ← A ∪ {choose}               // 放入解集lastFinish ← f[choose]         // 记录上一次已选活动的结束时间// —— 第 2 步:从第 2 个活动开始往后扫描 ——  for i ← 2 to n do              // 依序考察每个活动if s[i] ≥ lastFinish then  // 若当前活动的开始时间不早于上一次结束A ← A ∪ { i }          // 选中它!lastFinish ← f[i]      // 更新“最近一次结束时间”// —— 扫描完毕,A 就是最大兼容子集 ——  return A

变量回顾

变量名含义
A当前已确定选入的活动下标集合
choose第一轮选中的活动(结束最早)
lastFinish最近一次被选中活动的结束时间
ifor-loop 的活动下标指针(从 2 到 n)

执行示意(小样本)

编号:  1   2   3   4
s[]:   1   3   0   5
f[]:   4   5   6   7   ← 已按 f 升序排好起步: A = {1}, lastFinish = 4
i=2:  s[2]=3 < 4  → 不选
i=3:  s[3]=0 < 4  → 不选
i=4:  s[4]=5 ≥ 4  → 选 4, A = {1,4}, lastFinish=7
结束: 返回 {1,4}

复杂度

  • 排序阶段(若需要):O(n log n)

  • 主循环扫描    :O(n)

  • 总时间      :O(n log n)

  • 额外空间     :O(1)(仅常数变量)


这样写就非常直观了:

  • 先选 “结束时间最早的活动”

  • 再扫 其后所有活动,凡是开始时间 ≥ 最近结束时间的就加入

  • 一趟扫描就搞定!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88512.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88512.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88512.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql8启用日志审计插件

概述 等保要求&#xff0c;数据库启用日志审计。Mysql8上面使用开源插件audit-plugin-for-mysql&#xff08;MariaDB的审计插件不用折腾了&#xff0c;无论直接使用还是编译使用&#xff0c;在Mysql8上都不行&#xff09; 插件下载 日志审计插件下载地址&#xff1a; https:…

机器学习-线性模型

目录 线性模型 1、线性回归&#xff1a; 2、对数几率回归&#xff1a; 3、线性判别分析&#xff1a; 4、多分类学习&#xff1a; 5、类别不平衡问题&#xff1a; 基本数理知识补充&#xff1a; 损失函数&#xff1a; 凹凸函数 梯度下降 线性模型 线性模型形式简单、易…

Git上传代码如何解决Merge冲突

示例 解决方案 1、第一步切到本地的主分支 git checkout master2、拉取线上最新的代码 git pull3、切到本地自己的分支 gco feat-xx4、将代码从master变基&#xff08;移动/合并&#xff09;过来 git rebase master5、手动解决冲突 <<<<<<< HEAD 本…

fluentd + elasticsearch + grafana 不能显示问题

fluentd中配置log 源文件后&#xff0c;再配置elasticsearch后&#xff0c; elasticsearch pod中查询日志记录正常。 修改log 文件 后&#xff0c; elasticsearch pod中查询日志记录更新也正常。 但是在grafana中添加elasticsearch data source后&#xff0c; 连接正常&#…

《分布式事务新形态:AT模式如何被Seata TCC击穿》的深度解析,包含AT死锁原理/TCC原子性保障/Service Mesh深度集成三大硬核模块

一、AT模式的死刑判决&#xff1a;全局锁引发的血案 1.1 死锁现场还原&#xff08;支付宝真实案例&#xff09; 1.2 全局锁原理与缺陷 二、TCC模式的绝地反击&#xff1a;原子性保障三板斧 2.1 TCC核心架构设计 2.2 幂等控制原子防护网 三、Service Mesh深度集成&#xf…

【Elasticsearch】es初识,在项目架构中的用途,与mysql和kafka的配合使用,

ES是一个开源的高扩展的分布式全文检索引擎 在项目已有mysql增删改查的情况下&#xff0c;新增kafka&#xff0c;es流程 用户新增/修改商家&#xff08;写MySQL&#xff09; ↓ Kafka 生产者发送商家数据消息 ↓ Kafka 消费者监听消息 → 写入 Elasticsearch ↓ 前端搜索商家时…

【DataWhale组队学习】AI办公实践与应用-数据分析

AI办公&#xff1a;数据分析 1. 使用大模型进行数据分析的常见流程 把数据扔给AI让AI自动分析&#xff0c;并告诉你结果 下面我们对上面两个步骤进行详细说明 2. 使用大模型进行数据分析 2.1 将数据扔给大模型 2.1.1 选择合适的办公大模型 要使用大模型进行数据分析时&a…

5G 浪潮:发展全景、困境突围与未来航向

在当今数字化浪潮中&#xff0c;5G 技术宛如一颗璀璨的明星&#xff0c;照亮了各个行业前行的道路。自 5G 正式商用以来&#xff0c;它不仅深刻改变了人们的生活方式&#xff0c;更在工业、农业、交通等领域掀起了一场数字化转型的革命。本文将深入探讨 5G 技术的原理、发展现状…

理论加案例,一文读懂数据分析中的分类建模

一、什么是分类 分类&#xff0c;是数据建模领域的重要分支&#xff0c;你每天也都会接触。 手机垃圾短信过滤&#xff0c;就是分类算法给短信打的标签&#xff0c;比如0代表正常短信&#xff0c;1代表垃圾短信。 在医学领域&#xff0c;根据影像检查判断肿瘤是良性还是恶性。…

数组题解——二分查找【LeetCode】

704. 二分查找 算法逻辑分析 初始化边界 left 设为0&#xff0c;right 设为len(nums)&#xff0c;表示左闭右开区间 [left, right)。这意味着搜索区间包含下标left&#xff0c;但不包含下标right。 循环条件 while left < right:&#xff0c;只要left小于right&#xff0c…

Function AI 工作流发布:以 AI 重塑企业流程自动化

作者&#xff1a;寒斜 在 AI 技术飞速发展的今天&#xff0c;企业的流程自动化方式也正在发生深刻变革。过去&#xff0c;流程自动化往往依赖于人工配置和固定规则&#xff0c;难以适应复杂、多变的业务场景。而如今&#xff0c;随着 LLM&#xff0c;Agent&#xff0c;MCP 等节…

【单元测试】单元测试的定义和作用

介绍 ‌单元测试不仅是对函数进行测试&#xff0c;还包括对类、组件等最小可测试单元的测试‌。单元测试是对软件中的最小可测试单元进行验证的过程&#xff0c;这些单元可以是函数、方法、类或组件等。单元测试的主要目的是确保这些最小单元在隔离的环境中能够正确地实现其功…

AI 辅助生成 Mermaid 流程图

文章目录 背景Mermaid使用 AI 编写 Mermaid应用 背景 在 markdown 文档中虽然可以插入图片&#xff0c;但是也需要管理图片&#xff0c;一旦图片位置变了&#xff0c;文档中的图片就无法显示。图片占用空间较大&#xff0c;对于在线文档&#xff0c;为了加载速度&#xff0c;能…

定位坐标系深度研究报告

一、引言 定位坐标系是用于描述地理位置的数学工具&#xff0c;其发展与人类对地球形状的认知和技术需求密切相关。早期的定位依赖于天文观测&#xff08;如经纬度&#xff09;&#xff0c;现代则结合卫星技术&#xff08;如GPS&#xff09;和数学投影方法&#xff08;如墨卡托…

数字孪生技术引领UI前端设计潮流:沉浸式体验的新篇章

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 当虚拟世界与物理现实的边界逐渐模糊&#xff0c;数字孪生技术正以燎原之势重构 UI 前端设计的…

VR油库虚拟仿真系统:开启智慧油库新时代

在科技快速发展的当下&#xff0c;VR 技术在多行业广泛应用&#xff0c;以沉浸式等特点重塑行业模式。油库作为石油储存与转运关键枢纽&#xff0c;传统运营管理依赖人工经验和常规设备&#xff0c;存在安全风险高、培训成本大等问题。在此背景下&#xff0c;油库引入 VR 虚拟仿…

Oracle获取前100条记录

在Oracle数据库中&#xff0c;获取前100条记录可以通过多种方式实现&#xff0c;最常见的方法是使用ROWNUM或者在较新版本的Oracle中使用FETCH FIRST子句。以下是几种常见的方法&#xff1a; 方法1&#xff1a;使用ROWNUM ROWNUM是Oracle特有的一个伪列&#xff0c;用于为结果…

【开源库 | libpng】使用 libpng 读写 png 文件详细教程(附带源码)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Nuttx之nxsched_add_readytorun(non-SMP)

声明&#xff1a;此处代码分析&#xff0c;来源与 nuttx 12.8.0版本。 在分析之前&#xff0c;需要一图镇楼。 /***************************************************************************** Name: nxsched_add_readytorun** Description:* This function adds a TCB …

Nuttx之nxsched_add_blocked

声明&#xff1a;此处代码分析&#xff0c;来源与 nuttx 12.8.0版本。 在分析之前&#xff0c;需要一图镇楼。 /***************************************************************************** Name: nxsched_add_blocked** Description:* This function adds a TCB to o…