3439. Reschedule Meetings for Maximum Free Time I LeetCode Solution
In this guide, you will get 3439. Reschedule Meetings for Maximum Free Time I LeetCode Solution with the best time and space complexity. The solution to Reschedule Meetings for Maximum Free Time I problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Reschedule Meetings for Maximum Free Time I solution in C++
- Reschedule Meetings for Maximum Free Time I solution in Java
- Reschedule Meetings for Maximum Free Time I solution in Python
- Additional Resources
Problem Statement of Reschedule Meetings for Maximum Free Time I
You are given an integer eventTime denoting the duration of an event, where the event occurs from time t = 0 to time t = eventTime.
You are also given two integer arrays startTime and endTime, each of length n. These represent the start and end time of n non-overlapping meetings, where the ith meeting occurs during the time [startTime[i], endTime[i]].
You can reschedule at most k meetings by moving their start time while maintaining the same duration, to maximize the longest continuous period of free time during the event.
The relative order of all the meetings should stay the same and they should remain non-overlapping.
Return the maximum amount of free time possible after rearranging the meetings.
Note that the meetings can not be rescheduled to a time outside the event.
Example 1:
Input: eventTime = 5, k = 1, startTime = [1,3], endTime = [2,5]
Output: 2
Explanation:
Reschedule the meeting at [1, 2] to [2, 3], leaving no meetings during the time [0, 2].
Example 2:
Input: eventTime = 10, k = 1, startTime = [0,2,9], endTime = [1,4,10]
Output: 6
Explanation:
Reschedule the meeting at [2, 4] to [1, 3], leaving no meetings during the time [3, 9].
Example 3:
Input: eventTime = 5, k = 2, startTime = [0,1,2,3,4], endTime = [1,2,3,4,5]
Output: 0
Explanation:
There is no time during the event not occupied by meetings.
Constraints:
1 <= eventTime <= 109
n == startTime.length == endTime.length
2 <= n <= 105
1 <= k <= n
0 <= startTime[i] < endTime[i] <= eventTime
endTime[i] <= startTime[i + 1] where i lies in the range [0, n – 2].
Complexity Analysis
- Time Complexity: O(n)
- Space Complexity: O(n)
3439. Reschedule Meetings for Maximum Free Time I LeetCode Solution in C++
class Solution {
public:
int maxFreeTime(int eventTime, int k, vector<int>& startTime,
vector<int>& endTime) {
const vector<int> gaps = getGaps(eventTime, startTime, endTime);
int windowSum = accumulate(gaps.begin(), gaps.begin() + k + 1, 0);
int ans = windowSum;
for (int i = k + 1; i < gaps.size(); ++i) {
windowSum += gaps[i] - gaps[i - k - 1];
ans = max(ans, windowSum);
}
return ans;
}
private:
vector<int> getGaps(int eventTime, const vector<int>& startTime,
const vector<int>& endTime) {
vector<int> gaps{startTime[0]};
for (int i = 1; i < startTime.size(); ++i)
gaps.push_back(startTime[i] - endTime[i - 1]);
gaps.push_back(eventTime - endTime.back());
return gaps;
}
};
/* code provided by PROGIEZ */
3439. Reschedule Meetings for Maximum Free Time I LeetCode Solution in Java
class Solution {
public int maxFreeTime(int eventTime, int k, int[] startTime, int[] endTime) {
int[] gaps = getGaps(eventTime, startTime, endTime);
int windowSum = Arrays.stream(gaps, 0, k + 1).sum();
int ans = windowSum;
for (int i = k + 1; i < gaps.length; i++) {
windowSum += gaps[i] - gaps[i - k - 1];
ans = Math.max(ans, windowSum);
}
return ans;
}
private int[] getGaps(int eventTime, int[] startTime, int[] endTime) {
int[] gaps = new int[startTime.length + 1];
gaps[0] = startTime[0];
for (int i = 1; i < startTime.length; ++i)
gaps[i] = startTime[i] - endTime[i - 1];
gaps[startTime.length] = eventTime - endTime[endTime.length - 1];
return gaps;
}
}
// code provided by PROGIEZ
3439. Reschedule Meetings for Maximum Free Time I LeetCode Solution in Python
class Solution:
def maxFreeTime(
self,
eventTime: int,
k: int,
startTime: list[int],
endTime: list[int]
) -> int:
gaps = ([startTime[0]] +
[startTime[i] - endTime[i - 1] for i in range(1, len(startTime))] +
[eventTime - endTime[-1]])
windowSum = sum(gaps[:k + 1])
ans = windowSum
for i in range(k + 1, len(gaps)):
windowSum += gaps[i] - gaps[i - k - 1]
ans = max(ans, windowSum)
return ans
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.