leetcode 3440. 重新安排會議得到最多空余時間 II 中等

給你一個整數?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…