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

leetcode 3439. 重新安排会议得到最多空余时间 I 中等

给你一个整数 eventTime 表示一个活动的总时长,这个活动开始于 t = 0 ,结束于 t = eventTime 。

同时给你两个长度为 n 的整数数组 startTime 和 endTime 。它们表示这次活动中 n 个时间 没有重叠 的会议,其中第 i 个会议的时间为 [startTime[i], endTime[i]] 。

你可以重新安排 至多 k 个会议,安排的规则是将会议时间平移,且保持原来的 会议时长 ,你的目的是移动会议后 最大化 相邻两个会议之间的 最长 连续空余时间。

移动前后所有会议之间的 相对 顺序需要保持不变,而且会议时间也需要保持互不重叠。

请你返回重新安排会议以后,可以得到的 最大 空余时间。

注意,会议 不能 安排到整个活动的时间以外。

示例 1:

输入:eventTime = 5, k = 1, startTime = [1,3], endTime = [2,5]

输出:2

解释:

将 [1, 2] 的会议安排到 [2, 3] ,得到空余时间 [0, 2] 。

示例 2:

输入:eventTime = 10, k = 1, startTime = [0,2,9], endTime = [1,4,10]

输出:6

解释:

将 [2, 4] 的会议安排到 [1, 3] ,得到空余时间 [3, 9] 。

示例 3:

输入:eventTime = 5, k = 2, startTime = [0,1,2,3,4], endTime = [1,2,3,4,5]

输出:0

解释:

活动中的所有时间都被会议安排满了。

提示:

  • 1 <= eventTime <= 10^9
  • n == startTime.length == endTime.length
  • 2 <= n <= 10^5
  • 1 <= k <= n
  • 0 <= startTime[i] < endTime[i] <= eventTime
  • endTime[i] <= startTime[i + 1] 其中 i 在范围 [0, n - 2] 之间。

分析:先用一个数组记录所有活动完成时间的前缀和。之后从第 1 个活动开始,每次选定 k 个活动,把这个 k 个活动全部移动到前一个活动的结束时间开始处排列,再用下一个活动的开始时间减去前一个活动结束时间加上 k 个活动的持续时间之和,得到一个结果。保留最大的结果即可。

注意第 1 个活动的开始时间可能不为 0,因此在处理第一次的情况时,要把第一个活动设定为 0 开始;同样最后一个活动的结束时间不一定为 eventTime,在处理最后 k 个活动时,需要把最后一个活动的结束时间设定为 eventTime,此时前面还能移动 k-1 个活动。

int maxFreeTime(int eventTime, int k, int* startTime, int startTimeSize, int* endTime, int endTimeSize) {int n=startTimeSize,ans=0,ret=0;int lastTime[n+6],left_preTime[n+6];for(int i=0;i<n;++i){left_preTime[i]=lastTime[i]=endTime[i]-startTime[i];if(i)left_preTime[i]+=left_preTime[i-1];}if(k==n)return eventTime-lastTime[k-1]-left_preTime[k-2];for(int i=0;i<=n-k;++i){int right,len=left_preTime[k-1+i],last=0;if(!i) last=len,right=startTime[k+i];else if(i<n-k)last=len+endTime[i-1]-left_preTime[i-1],right=startTime[k+i];else {right=eventTime-lastTime[n-1],last=left_preTime[k-2+i]+endTime[i-1]-left_preTime[i-1];}ans=fmax(right-last,ans);// printf("i=%d,len=%d,right=%d,ans=%d\n",i,len,right,ans);}return ans;
}

http://www.dtcms.com/a/272709.html

相关文章:

  • 征程 6M 部署 Omnidet 感知模型
  • Spark伪分布式集群搭建(Ubuntu系统)
  • 查看uniapp 项目中没有用到依赖
  • CanOpen转EtherCAT网关与台达伺服的配置指南配置软件篇
  • Rust Web 全栈开发(三):使用 Actix 构建简单的 Web Service
  • 【解决方案】基于 Amazon CloudFormation 打造三层 Web 应用架构实战
  • GitHub信息收集
  • 如何利用个人电脑搭建FTP文件服务器实现远程协作
  • 第二章-AIGC入门-AI视频生成:几款实用AI视频生成工具全解析(7/36)
  • 精准估算如何选?功能点与故事点估算法全解析
  • Navicat实现MySQL数据传输与同步完整指南
  • 【Axure教程】中继器间图片的传递
  • Meta新注意力机制给 Transformer 升了级!底层架构的革命!
  • JAVA JVM对象的创建
  • 水陆联防智能升级:AI入侵检测系统守护零死角安全
  • 介绍 cnpm exec electron-packager
  • x86汇编语言入门基础(三)汇编指令篇3 位移运算
  • 【threejs】第一人称视角之八叉树碰撞检测
  • 蜻蜓I即时通讯系统重构宣言:破茧重生的技术革命-长痛不如短痛卓伊凡|麻子|果果
  • 大健康IP如何借“合规创新”抢占行业新风口|创客匠人
  • 解读 Go 中的 constraints包
  • 【TCP/IP】7. IP 路由
  • xml 知识总结: xsd,xsi:schemaLocation,xmlns,xmlns:xsi
  • SpringBoot系列—MyBatis(xml使用)
  • codeforeces Round1032 - Round 1036
  • 【node后端】搭建项目(Express+Ts+Typeorm+Mysql一步到位)
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • Arc Institute提出首个AIVC虚拟细胞模型STATE
  • 上海交大医学院张维拓老师赴同济医院做R语言训练营培训
  • 从Debug中学习MiniGPT4