Skip to content

Commit dce5c4a

Browse files
committed
Jul 10
1 parent 8090ecb commit dce5c4a

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

2025-07-July-LeetCoding-Challenge/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
| July 07 | [1353. Maximum Number of Events That Can Be Attended](https://leetcode.com/problems/maximum-number-of-events-that-can-be-attended/) | Medium | Solved |
1414
| July 08 | [1751. Maximum Number of Events That Can Be Attended II](https://leetcode.com/problems/maximum-number-of-events-that-can-be-attended-ii/) | Hard | Solved |
1515
| July 09 | [3439. Reschedule Meetings for Maximum Free Time I](https://leetcode.com/problems/reschedule-meetings-for-maximum-free-time-i/) | Medium | Solved |
16-
| July 10 | []() | | |
16+
| July 10 | [3440. Reschedule Meetings for Maximum Free Time II](https://leetcode.com/problems/reschedule-meetings-for-maximum-free-time-ii/) | Medium | Solved |
1717
| July 11 | []() | | |
1818
| July 12 | []() | | |
1919
| July 13 | []() | | |
@@ -41,5 +41,5 @@
4141
| Level | Problems | Solved | Unsolved |
4242
| --- | --- | --- | --- |
4343
| Easy | 3 | 3 | 0 |
44-
| Medium | 3 | 3 | 0 |
44+
| Medium | 4 | 4 | 0 |
4545
| Hard | 3 | 1 | 2 |
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution:
2+
def maxFreeTime(self, eventTime: int, startTime: list[int], endTime: list[int]) -> int:
3+
gaps = [startTime[0]] # 0 - first meeting
4+
for i in range(1, len(startTime)):
5+
gaps.append(startTime[i] - endTime[i - 1]) # previous meeting - current meeting
6+
gaps.append(eventTime - endTime[-1]) # last meeting - end
7+
8+
# compute max suffix array
9+
max_right_gap = [0] * len(gaps)
10+
for i in range(len(gaps) - 2, -1, -1):
11+
max_right_gap[i] = max(max_right_gap[i + 1], gaps[i + 1])
12+
13+
# compute max prefix
14+
# compute largest possible gap by removing current meeting (if possible)
15+
max_free_time, max_left_gap = 0, 0
16+
for i in range(1, len(gaps)):
17+
curr_meeting = endTime[i - 1] - startTime[i - 1]
18+
if curr_meeting <= max(max_left_gap, max_right_gap[i]):
19+
max_free_time = max(max_free_time, gaps[i - 1] + gaps[i] + curr_meeting)
20+
max_free_time = max(max_free_time, gaps[i - 1] + gaps[i])
21+
max_left_gap = max(max_left_gap, gaps[i - 1])
22+
return max_free_time
23+
24+
25+
def main():
26+
eventTime = 5
27+
startTime = [1, 3]
28+
endTime = [2, 5]
29+
assert Solution().maxFreeTime(eventTime, startTime, endTime) == 2
30+
31+
eventTime = 10
32+
startTime = [0, 7, 9]
33+
endTime = [1, 8, 10]
34+
assert Solution().maxFreeTime(eventTime, startTime, endTime) == 7
35+
36+
eventTime = 10
37+
startTime = [0, 3, 7, 9]
38+
endTime = [1, 4, 8, 10]
39+
assert Solution().maxFreeTime(eventTime, startTime, endTime) == 6
40+
41+
eventTime = 5
42+
startTime = [0, 1, 2, 3, 4]
43+
endTime = [1, 2, 3, 4, 5]
44+
assert Solution().maxFreeTime(eventTime, startTime, endTime) == 0
45+
46+
47+
if __name__ == '__main__':
48+
main()

0 commit comments

Comments
 (0)