diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md index 11d3a1ed5d2c7..3ba0f8e2554c1 100644 --- a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README.md @@ -111,7 +111,50 @@ tags: #### Python3 ```python - +class Solution: + def maxFreeTime( + self, eventTime: int, startTime: List[int], endTime: List[int] + ) -> int: + n = len(startTime) + res = 0 + + left_gaps = [0] * n + left_gaps[0] = startTime[0] + for meet in range(1, n): + left_gaps[meet] = max( + left_gaps[meet - 1], startTime[meet] - endTime[meet - 1] + ) + + right_gaps = [0] * n + right_gaps[n - 1] = eventTime - endTime[-1] + for meet in range(n - 2, -1, -1): + right_gaps[meet] = max( + right_gaps[meet + 1], startTime[meet + 1] - endTime[meet] + ) + + for meet in range(n): + left_gap = ( + left_gaps[meet] if meet == 0 else startTime[meet] - endTime[meet - 1] + ) + right_gap = ( + right_gaps[meet] + if meet == n - 1 + else startTime[meet + 1] - endTime[meet] + ) + + interval = 0 + + if ( + meet != 0 + and left_gaps[meet - 1] >= (endTime[meet] - startTime[meet]) + or meet != n - 1 + and right_gaps[meet + 1] >= (endTime[meet] - startTime[meet]) + ): + interval = endTime[meet] - startTime[meet] + + res = max(res, left_gap + interval + right_gap) + + return res ``` #### Java diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md index 65958a55d6a0a..ab48a41b54c86 100644 --- a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/README_EN.md @@ -109,7 +109,50 @@ tags: #### Python3 ```python - +class Solution: + def maxFreeTime( + self, eventTime: int, startTime: List[int], endTime: List[int] + ) -> int: + n = len(startTime) + res = 0 + + left_gaps = [0] * n + left_gaps[0] = startTime[0] + for meet in range(1, n): + left_gaps[meet] = max( + left_gaps[meet - 1], startTime[meet] - endTime[meet - 1] + ) + + right_gaps = [0] * n + right_gaps[n - 1] = eventTime - endTime[-1] + for meet in range(n - 2, -1, -1): + right_gaps[meet] = max( + right_gaps[meet + 1], startTime[meet + 1] - endTime[meet] + ) + + for meet in range(n): + left_gap = ( + left_gaps[meet] if meet == 0 else startTime[meet] - endTime[meet - 1] + ) + right_gap = ( + right_gaps[meet] + if meet == n - 1 + else startTime[meet + 1] - endTime[meet] + ) + + interval = 0 + + if ( + meet != 0 + and left_gaps[meet - 1] >= (endTime[meet] - startTime[meet]) + or meet != n - 1 + and right_gaps[meet + 1] >= (endTime[meet] - startTime[meet]) + ): + interval = endTime[meet] - startTime[meet] + + res = max(res, left_gap + interval + right_gap) + + return res ``` #### Java diff --git a/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.py b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.py new file mode 100644 index 0000000000000..326b1b6aacc0a --- /dev/null +++ b/solution/3400-3499/3440.Reschedule Meetings for Maximum Free Time II/Solution.py @@ -0,0 +1,44 @@ +class Solution: + def maxFreeTime( + self, eventTime: int, startTime: List[int], endTime: List[int] + ) -> int: + n = len(startTime) + res = 0 + + left_gaps = [0] * n + left_gaps[0] = startTime[0] + for meet in range(1, n): + left_gaps[meet] = max( + left_gaps[meet - 1], startTime[meet] - endTime[meet - 1] + ) + + right_gaps = [0] * n + right_gaps[n - 1] = eventTime - endTime[-1] + for meet in range(n - 2, -1, -1): + right_gaps[meet] = max( + right_gaps[meet + 1], startTime[meet + 1] - endTime[meet] + ) + + for meet in range(n): + left_gap = ( + left_gaps[meet] if meet == 0 else startTime[meet] - endTime[meet - 1] + ) + right_gap = ( + right_gaps[meet] + if meet == n - 1 + else startTime[meet + 1] - endTime[meet] + ) + + interval = 0 + + if ( + meet != 0 + and left_gaps[meet - 1] >= (endTime[meet] - startTime[meet]) + or meet != n - 1 + and right_gaps[meet + 1] >= (endTime[meet] - startTime[meet]) + ): + interval = endTime[meet] - startTime[meet] + + res = max(res, left_gap + interval + right_gap) + + return res \ No newline at end of file