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

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

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

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

注意,会议 不能 安排到整个活动的时间以外,且会议之间需要保持互不重叠。

注意:重新安排会议以后,会议之间的顺序可以发生改变。

示例 1:

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

输出:2

解释:

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

示例 2:

输入:eventTime = 10, startTime = [0,7,9], endTime = [1,8,10]

输出:7

解释:

将 [0, 1] 的会议安排到 [8, 9] ,得到空余时间 [0, 7] 。

示例 3:

输入:eventTime = 10, startTime = [0,3,7,9], endTime = [1,4,8,10]

输出:6

解释:

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

示例 4:

输入:eventTime = 5, 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
  • 0 <= startTime[i] < endTime[i] <= eventTime
  • endTime[i] <= startTime[i + 1] 其中 i 在范围 [0, n - 2] 之间。

分析:首先预处理出每两个会议之间的间隔。对于每一个会议,如果存在一个不是它左右会议的间隔时间大于它的持续时间,说明可以把这个会议移动到其它会议之间,从而使得它的前后会议之间间隔变大;如果不存在这样的间隔时间,则把这个会议的开始时间设定为前一个会议的结束时间,计算间隔。

注意第一个会议和最后一个会议。第一个会议可以移动到最后一个会议的右边,最后一个会议可以移动到第一个会议的左边。

3439 是移动 k 个会议,但要保持相对顺序;3440 则只能移动一个,但可以不考虑相对顺序。两道题都是贪心。

int cmp(const void *a,const void *b)
{return *(int*)a-*(int*)b;
}int maxFreeTime(int eventTime, int* startTime, int startTimeSize, int* endTime, int endTimeSize) {int ans=0,n=startTimeSize,t=0;int temp[n+5],interval[n+5],cnt[n+5];for(int i=1;i<n;++i)temp[i-1]=startTime[i]-endTime[i-1];qsort(temp,n-1,sizeof(int),cmp);interval[t]=temp[0];cnt[0]=1;int sum=1,flag=0;for(int i=1;i<=n-1;++i){if(temp[i]!=interval[t]||i==n-1)cnt[t++]=sum,interval[t]=temp[i],sum=1;else sum++;}// printf("t=%d\n",t);// for(int i=0;i<t;++i)// {//     printf("interval=%d cnt=%d\n",interval[i],cnt[i]);// }for(int i=0;i<n;++i){if(!i){int last=endTime[0]-startTime[0],right=startTime[1]-endTime[0];ans=fmax(ans,startTime[1]-last);ans=fmax(ans,startTime[0]-0);bool flag=0;if(eventTime-endTime[n-1]>=last)flag=1;if(!flag){for(int j=t-1;j>=0;--j){if(interval[j]>=last){if(interval[j]!=right)flag=1;else if(interval[j]==right&&cnt[j]>1)flag=1;}if(flag)break;if(interval[j]<last)break;}}if(flag)ans=fmax(startTime[1],ans);// printf("i=%d flag=%d ans=%d\n",i,flag,ans);}else if(i==n-1){int last=endTime[n-1]-startTime[n-1],left=startTime[i]-endTime[i-1];ans=fmax(ans,eventTime-last-endTime[n-2]);ans=fmax(ans,eventTime-endTime[n-1]);bool flag=0;if(startTime[0]-0>=last)flag=1;if(!flag){for(int j=t-1;j>=0;--j){if(interval[j]>=last){if(interval[j]!=left)flag=1;else if(interval[j]==left&&cnt[j]>1)flag=1;}if(flag)break;if(interval[j]<last)break;}}if(flag)ans=fmax(eventTime-endTime[n-2],ans);// printf("i=%d flag=%d ans=%d\n",i,flag,ans);}else{int last=endTime[i]-startTime[i],left=startTime[i]-endTime[i-1],right=startTime[i+1]-endTime[i];int x=1;if(left==right)x=2;bool flag=0;for(int j=t-1;j>=0;--j){if(interval[j]>=last){if(interval[j]!=left&&right!=interval[j])flag=1;else if(interval[j]==left&&cnt[j]>x)flag=1;else if(interval[j]==right&&cnt[j]>x)flag=1;}if(flag)break;if(interval[j]<last)break;}if(!flag){if(eventTime-endTime[n-1]>=last||startTime[0]>=last)flag=1;}if(flag)ans=fmax(ans,startTime[i+1]-endTime[i-1]);else ans=fmax(ans,startTime[i+1]-endTime[i-1]-last);// printf("i=%d start=%d end=%d flag=%d ans=%d\n",i,startTime[i],endTime[i],flag,ans);}}return ans;
}

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

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

相关文章

大型语言模型(LLM)的最新研究进展及相关新信息技术

大型语言模型(LLM)的最新研究进展及相关新信息技术 一、Google的Gemini 2.0系列 1. Gemini 2.0 Flash Thinking 核心技术:引入“推理时计算”(Inference-Time Computation)机制,支持模型在回答复杂问题前自主“思考”,显著提升数学和代码任务的准确性。多模态能力:支…

c++-友元函数和友元类

友元友元提供了一种突破封装的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;破坏了封装&#xff0c;所以 友元不宜多用。 友元分为&#xff1a;友元函数和友元类友元函数问题现在尝试去在Date类里重载operator<<。无论怎样设置参数&#xff0c;只要…

alpinelinux的网络配置

在 Alpine Linux 中配置网络&#xff0c;您可以根据以下步骤进行&#xff1a; 配置本机 hostname&#xff1a; 本机hostname保存在/etc/hostname文件中。 echo alpine-web > /etc/hostname hostname -F /etc/hostname # 立即生效运行结果&#xff1a; localhost:~# echo &qu…

day1--项目搭建and内容管理模块

1. 项目搭建1.1 创建父工程1.1.1 创建xuecheng-plus-project工程1.1.2 导入依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

腾讯云录音文件快速识别实战教程

文章目录前言接口简介前置条件实战添加 Maven 依赖核心代码示例参数说明个人简介前言 本文介绍如何基于腾讯云语音识别 快速识别接口&#xff0c;实现通过 HTTPS POST 方式上传音频并快速识别同步返回识别结果的实战流程。 接口简介 腾讯云语音识别 快速识别接口 支持上传音…

.NET Framework 安装失败及异常情况 常用处理方法

在使用.NET Framework 的过程中&#xff0c;安装失败或出现异常是比较常见的问题。这些问题可能由系统环境、文件损坏、权限不足等多种原因引起。以下是一些常见的安装失败及异常情况&#xff0c;以及对应的处理方法&#xff1a; 首先&#xff0c;下载.net framework 3.5文件。…

​AI赋能的自动驾驶革命:从安全架构到世界模型的系统性突破

​在计算机视觉与机器人技术的交汇处&#xff0c;自动驾驶正经历着从模块化设计向端到端AI系统的范式转移。NVIDIA作为这场变革的核心推动者&#xff0c;其DRIVE平台展现出的技术整合深度令人惊叹——从芯片级的能效优化到城市级数字孪生仿真&#xff0c;构建起覆盖"AI训练…

ACL协议:核心概念与配置要点解析

ACL协议 在H3C网络设备&#xff08;交换机、路由器、防火墙等&#xff09;中&#xff0c;ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09; 是一个核心的流量过滤和控制机制。核心目的&#xff1a; 流量过滤&#xff1a;控制哪些流量可以通过接口&…

文件追加模式:编写一个程序,向一个已存在的文件末尾追加内容。

知识点文件打开模式"r"&#xff1a;只读&#xff1b;文件须存在。"w"&#xff1a;写入&#xff1b;清空或新建。"a"&#xff1a;追加&#xff1b;文件末尾写入。"a"&#xff1a;读/写追加。追加&#xff08;Append&#xff09;机制&qu…

OneCode框架事件基础模型架构深度剖析与代码实现

一、整体架构概览 作为OneCode框架的事件核心模块&#xff0c;构建了一套跨浏览器、多终端兼容的事件驱动架构。该架构采用分层设计思想&#xff0c;从底层事件捕获到高层事件模拟&#xff0c;形成了完整的事件生命周期管理体系。整体架构可分为五个核心层次&#xff1a;事件捕…

Spring for Apache Pulsar->Reactive Support->Message Production

好消息&#xff1a;Spring for Apache Pulsar这两天刚刚升到2.0.0版本1. ReactivePulsarTemplate在Pulsar生产者端&#xff0c;Spring Boot自动配置提供了一个ReactivePulsarTemplate用于发布记录。该模板实现了一个名为ReactivePulse Operations的接口&#xff0c;并提供了通过…

AtCoder Beginner Contest 413

比赛链接如下&#xff1a;Denso Create Programming Contest 2025&#xff08;AtCoder Beginner Contest 413&#xff09; - AtCoder A - Content Too Large Problem Statement Takahashi has N items and one bag. The size of the i-th (1≤i≤N) item is Ai​, and the si…

Java学习---JVM(1)

JVM&#xff0c;即Java虚拟机&#xff0c;其是Java程序的运行环境&#xff0c;是Java技术的核心组成部分&#xff0c;本次就JVM的自动内存管理详细展开&#xff1a;JVM的内存区域分为2大类&#xff0c;即线程私有的和线程共享的&#xff0c;前者分为3大块&#xff0c;虚拟机栈、…

Qt去噪面板搭建

建立单选互斥性面板用于选择噪声属性// 创建去噪面板 QWidget* noisePanel new QWidget(); QVBoxLayout* mainLayout new QVBoxLayout(noisePanel); mainLayout->setContentsMargins(10, 10, 10, 10); mainLayout->setSpacing(15);// 去噪方法选择组QGroupBox* methodG…

无需公网IP的文件交互:FileCodeBox容器化部署技术解析

文章目录 前言1.Docker部署2.简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在数字化办公需求日益增长的今天&#xff0c;文件传输已成为职场协作的高频刚需。传统共享方式却饱受诟病&#xff1a;"需要安装哪些臃肿客户端&#xff1f;免费版…

1. http 有哪些版本,你是用的哪个版本,怎么查看

http 有哪些版本&#xff0c;你是用的哪个版本&#xff0c;怎么查看 总结&#xff1a;http 版本有 0.9/1.0/1.1/2.0/3.0&#xff0c;我们常用的是 1.1 和 2.0&#xff0c;使用 window.chrome.loadTimes() 获取 http 版本。 常见的 HTTP 版本 HTTP/0.9&#xff1a;最初的版本&am…

C# IIncrementalGenerator干点啥

生成器项目 得基于.Net Stander 2.0 重要&#xff1a;<IsRoslynComponent>true</IsRoslynComponent>、<IncludeBuildOutput>false</IncludeBuildOutput>、 <PackageReference Include"Microsoft.CodeAnalysis" Version"4.14.0&q…

在徐州网络中服务器租用与托管的优势

一、高性价比&#xff1a;徐州万恒提供多种配置的服务器供租用&#xff0c;满足不同企业和个人的业务需求&#xff0c;无论是初创企业追求低成本高效能&#xff0c;还是对性能有严苛要求的大型项目&#xff0c;都能找到合适的服务器型号&#xff0c;以极具竞争力的价格获取强大…

学习软件测试的第十四天(移动端)

一.常用的abd命令有哪些1.什么是 ADB&#xff1f;通俗解释&#xff1a; ADB 就像一个桥梁&#xff0c;让电脑能控制连接的手机&#xff0c;比如安装APP、抓日志、重启设备等。专业术语总结&#xff1a; ADB&#xff08;Android Debug Bridge&#xff09;是 Android SDK 提供的命…

04-ES6

let和const命令ES6中新增了let命令&#xff0c;用来声明变量&#xff0c;用法类似与varlet和var的不同&#xff1a;1、不存在变量提升 console.log(a); //Cannot access a before initializationlet a 100;2、同一个作用域不能重复定义同一个名称var c 20;let c 30;c…