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

(LeetCode 每日一题) 3440. 重新安排会议得到最多空余时间 II (贪心)

题目:3440. 重新安排会议得到最多空余时间 II

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:(LeetCode 每日一题 ) 3439. 重新安排会议得到最多空余时间 I (滑动窗口)的进阶版。

在得到空闲数组v之后,本质就是枚举移动每一个活动,观察是否有除了其左右两边空闲位置外,还有没有不小于这个活动长度的空闲位置。细节看注释

C++版本:

class Solution {
public:int maxFreeTime(int eventTime, vector<int>& startTime, vector<int>& endTime) {// 空闲位置数组,空闲为0也要记录vector<int> v;int last=0;for(int i=0;i<startTime.size();i++){v.push_back(startTime[i]-last);last=endTime[i];}if(last<=eventTime){v.push_back(eventTime-last);}// q[i]表示:在i的右边最大的空闲位置int n=v.size();vector<int> q(n);q[n-1]=0;for(int i=n-2;i>=0;i--){q[i]=max(q[i+1],v[i+1]);}//已遍历过的空闲位置的最大值int mx=0;// 答案int ans=0;// 遍历,来枚举每一个活动被移动for(int i=1;i<n;i++){// 第一个活动和0之间有一个空闲位置,所以活动的下标是i-1// 第i-1活动左右两边空闲位置int t=v[i-1]+v[i];// 第i-1活动的长度int len=endTime[i-1]-startTime[i-1];// 有不小于这个活动长度的空闲位置if(len<=mx || len<=q[i]){// 可加上当前活动的长度lenans=max(ans,len+t);}else{// 只能将当前活动移动到左右两侧ans=max(ans,t);}// 维护已遍历过的空闲位置的最大值mx=max(mx,v[i-1]);}return ans;}
};

JAVA版本:

class Solution {public int maxFreeTime(int eventTime, int[] startTime, int[] endTime) {List<Integer> v=new ArrayList<>();int last=0;for(int i=0;i<startTime.length;i++){v.add(startTime[i]-last);last=endTime[i];}if(last<=eventTime){v.add(eventTime-last);}int n=v.size();int[] q=new int[n];q[n-1]=0;for(int i=n-2;i>=0;i--){q[i]=Math.max(q[i+1],v.get(i+1));}int mx=0;int ans=0;for(int i=1;i<n;i++){int t=v.get(i-1)+v.get(i);int len=endTime[i-1]-startTime[i-1];if(len<=mx || len<=q[i]){ans=Math.max(ans,len+t);}else{ans=Math.max(ans,t);}mx=Math.max(mx,v.get(i-1));}return ans;}
}

GO版本:

func maxFreeTime(eventTime int, startTime []int, endTime []int) int {v:=[]int{}n:=len(startTime)last:=0for i:=0;i<n;i++ {v=append(v,startTime[i]-last)last=endTime[i]}if last<=eventTime {v=append(v,eventTime-last)}n=len(v)q:=make([]int,n)q[n-1]=0for i:=n-2;i>=0;i-- {q[i]=max(q[i+1],v[i+1])}mx:=0ans:=0for i:=1;i<n;i++ {len:=endTime[i-1]-startTime[i-1]t:=v[i]+v[i-1]if len<=mx || len<=q[i] {ans=max(ans,t+len)}else{ans=max(ans,t)}mx=max(mx,v[i-1])}return ans
}
http://www.xdnf.cn/news/15035.html

相关文章:

  • 智能体的记忆系统:短期记忆、长期记忆与知识图谱
  • EFK/ELK9.0.3 windows搭建
  • ASP.NET Core 8 轻松配置Serilog日志
  • STM32-定时器输入捕获
  • 通用游戏前端架构设计思考
  • 20-C#构造函数--虚方法
  • 小程序软装: 组件库开发
  • 爬虫-正则表达式
  • 汽车功能安全-软件单元验证 (Software Unit Verification)【用例导出方法、输出物】8
  • skywalking-agent-docker镜像
  • C++11 std::move与std::move_backward深度解析
  • 数据分析框架和方法
  • 华为静态路由配置
  • mysql 可用性的保障机制:主讲主从复制机制
  • sqlplus表结构查询
  • CTFHub————Web前置技能[HTTP协议(302跳转、Cookie)]
  • 【数据分析】多数据集网络分析:探索健康与退休研究中的变量关系
  • IntelliJ IDEA 2025.1.3创建不了java8的项目
  • 洛谷 P1104 生日---排序
  • VS2022 C++ EasyX库 扫雷游戏项目开发:打造经典游戏的详细之旅
  • JavaScript基础篇——第五章 对象(最终篇)
  • whitt算法之特征向量的尺度
  • [数学基础] 矩阵的秩及其应用
  • K8S使用命令多集群管理配置
  • Java异步编程全解析:从基础到高阶实战
  • C#基础篇(09)结构体(struct)与类(class)的详细区别
  • 安卓设备信息查看器 - 源码编译
  • PiscTrace深蹲计数功能实现:基于 YOLO-Pose 和人体关键点分析
  • Unity Demo-3DFarm详解-其二
  • 【03】MFC入门到精通——MFC 添加控件 设置属性 按钮 文本框