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

  1. Problem Statement
  2. Complexity Analysis
  3. Reschedule Meetings for Maximum Free Time I solution in C++
  4. Reschedule Meetings for Maximum Free Time I solution in Java
  5. Reschedule Meetings for Maximum Free Time I solution in Python
  6. Additional Resources
3439. Reschedule Meetings for Maximum Free Time I LeetCode Solution image

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

Happy Coding! Keep following PROGIEZ for more updates and solutions.