1+ public class Solution3440 {
2+ private int eventTime ;
3+ private int [] startTime , endTime ;
4+
5+ public int maxFreeTime (int eventTime , int [] startTime , int [] endTime ) {
6+ this .eventTime = eventTime ;
7+ this .startTime = startTime ;
8+ this .endTime = endTime ;
9+
10+ int n = startTime .length ;
11+ // 最大的三个空位所在的位置(下标)分别是 a,b,c。
12+ int a = 0 , b = -1 , c = -1 ;
13+ for (int i = 1 ; i <= n ; i ++) {
14+ int sz = get (i );
15+ if (sz > get (a )) {
16+ c = b ;
17+ b = a ;
18+ a = i ;
19+ } else if (b < 0 || sz > get (b )) {
20+ c = b ;
21+ b = i ;
22+ } else if (c < 0 || sz > get (c )) {
23+ c = i ;
24+ }
25+ }
26+
27+ int ans = 0 ;
28+ for (int i = 0 ; i < n ; i ++) {
29+ int sz = endTime [i ] - startTime [i ];
30+ if (i != a && i + 1 != a && sz <= get (a ) ||
31+ i != b && i + 1 != b && sz <= get (b ) ||
32+ sz <= get (c )) {
33+ ans = Math .max (ans , get (i ) + sz + get (i + 1 ));
34+ } else {
35+ ans = Math .max (ans , get (i ) + get (i + 1 ));
36+ }
37+ }
38+ return ans ;
39+ }
40+
41+ private int get (int i ) {
42+ if (i == 0 ) {
43+ return startTime [0 ];
44+ }
45+ int n = startTime .length ;
46+ if (i == n ) {
47+ return eventTime - endTime [n - 1 ];
48+ }
49+ return startTime [i ] - endTime [i - 1 ];
50+ }
51+ }
52+ /*
53+ 3440. 重新安排会议得到最多空余时间 II
54+ https://leetcode.cn/problems/reschedule-meetings-for-maximum-free-time-ii/description/
55+
56+ 第 149 场双周赛 T3。
57+
58+ 给你一个整数 eventTime 表示一个活动的总时长,这个活动开始于 t = 0 ,结束于 t = eventTime 。
59+ 同时给你两个长度为 n 的整数数组 startTime 和 endTime 。它们表示这次活动中 n 个时间 没有重叠 的会议,其中第 i 个会议的时间为 [startTime[i], endTime[i]] 。
60+ 你可以重新安排 至多 一个会议,安排的规则是将会议时间平移,且保持原来的 会议时长 ,你的目的是移动会议后 最大化 相邻两个会议之间的 最长 连续空余时间。
61+ 请你返回重新安排会议以后,可以得到的 最大 空余时间。
62+ 注意,会议 不能 安排到整个活动的时间以外,且会议之间需要保持互不重叠。
63+ 注意:重新安排会议以后,会议之间的顺序可以发生改变。
64+ 提示:
65+ 1 <= eventTime <= 10^9
66+ n == startTime.length == endTime.length
67+ 2 <= n <= 10^5
68+ 0 <= startTime[i] < endTime[i] <= eventTime
69+ endTime[i] <= startTime[i + 1] 其中 i 在范围 [0, n - 2] 之间。
70+
71+ 维护前三大的空位+枚举+分类讨论。
72+ 时间复杂度 O(n)。
73+ 相似题目: 3439. 重新安排会议得到最多空余时间 I
74+ https://leetcode.cn/problems/reschedule-meetings-for-maximum-free-time-i/description/
75+ */
0 commit comments