Meeting Scheduler

Updated on 13 June, 2025
Meeting Scheduler header image

Problem Statement

In this scheduling problem, we are given two sets of time slots, slots1 and slots2, representing the available time intervals of two individuals. A time slot is represented as a two-element array [start, end], defining a continuous interval from start to end. The goal is to determine the earliest possible time slot that both individuals can share for a meeting of a specific duration.

A shared slot must be at least as long as the duration specified. If such a shared slot exists, it should be returned as [start, start + duration]. If no overlapping time slot meets the requirement, an empty array should be returned. Importantly, the time slots for each person do not intersect within the same array, meaning no two slots overlap or touch each other.

Examples

Example 1

Input:

slots1 = [[10,50],[60,120],[140,210]], slots2 = [[0,15],[60,70]], duration = 8

Output:

[60,68]

Example 2

Input:

slots1 = [[10,50],[60,120],[140,210]], slots2 = [[0,15],[60,70]], duration = 12

Output:

[]

Constraints

  • 1 <= slots1.length, slots2.length <= 104
  • slots1[i].length, slots2[i].length == 2
  • slots1[i][0] < slots1[i][1]
  • slots2[i][0] < slots2[i][1]
  • 0 <= slots1[i][j], slots2[i][j] <= 109
  • 1 <= duration <= 106

Approach and Intuition

To solve this problem, let's follow these steps:

  1. Initiate two pointers, one for each list (i for slots1 and j for slots2), and start at the beginning of each list.
  2. Determine the overlap between the current slots pointed to by i and j. Calculate the maximum of the two starting points, and the minimum of the two ending points to find the potential overlapping region, [overlap_start, overlap_end].
  3. Check if this overlapping region can accommodate the meeting length duration. This can be done by verifying if overlap_end - overlap_start is at least duration.
  4. If a valid overlap is found (i.e., an overlap that can host the meeting for the required duration), return the starting time and the starting time plus the duration: [overlap_start, overlap_start + duration].
  5. If the current slot in slots1 ends before the current slot in slots2, increment i, otherwise increment j. This is based on the idea of processing the earlier finishing intervals first to explore all potential early starts.
  6. Continue this process until either list is fully traversed.
  7. If no valid meeting duration is found throughout the process, return an empty array.

This algorithm efficiently finds the earliest possible overlap by always moving the pointer that points to the interval ending first, therefore always attempting to find the smallest start times possible for overlaps. This approach ensures that time complexity is kept manageable by not checking every possible pair of intervals.

Solutions

  • Java
  • Python
java
class Solution {
    public List<Integer> findMeetingSlot(int[][] slotsA, int[][] slotsB, int requiredDuration) {
        PriorityQueue<int[]> availableSlots = new PriorityQueue<>((a, b) -> a[0] - b[0]);

        for (int[] slot: slotsA) {
            if (slot[1] - slot[0] >= requiredDuration) availableSlots.offer(slot);
        }
        for (int[] slot: slotsB) {
            if (slot[1] - slot[0] >= requiredDuration) availableSlots.offer(slot);
        }

        while (!availableSlots.isEmpty()) {
            int[] first = availableSlots.poll();
            if (availableSlots.isEmpty()) break;
            int[] next = availableSlots.peek();
            if (first[1] >= next[0] + requiredDuration) {
                return new ArrayList<Integer>(Arrays.asList(next[0], next[0] + requiredDuration));
            }
        }
        return new ArrayList<Integer>();
    }
}

The "Meeting Scheduler" solution in Java focuses on finding a common available meeting time slot between two individuals based on their separate available time slots and a required duration for the meeting.

Procedure:

  1. Initiate a priority queue to store available time slots, ordering them by their start times.

  2. Iterate through each time slot of the first person (slotsA). Add the time slot to the priority queue if it meets or exceeds the required duration.

  3. Repeat the above step for the second person's time slots (slotsB).

  4. Process the priority queue to find overlapping time slots between the two schedules:

    • Retrieve and remove the earliest slot from the queue.
    • Check if there's another slot available in the queue; if not, break the loop as no further checks are necessary.
    • Compare the end time of the first slot and the start time of the next slot in the queue. If they overlap for at least the required duration, create and return a list representing the start time of the meeting and the end time, which is start time plus the required duration.
  5. If no overlapping slots meet the conditions, return an empty list.

Key features:

  • Utilizing a priority queue simplifies the process of sorting and accessing the earliest time slots.
  • By only adding slots to the queue that are equal to or longer than the required duration, the function efficiently narrows down potential meeting times.
  • This approach ensures optimal time complexity by reducing unnecessary comparisons between time slots that don't meet the criteria.
python
class Solution:
    def findMutualAvailableSlot(self, slotsA: List[List[int]], slotsB: List[List[int]], duration: int) -> List[int]:
        # Filtering slots that have enough duration and merging lists
        availableSlots = list(filter(lambda x: x[1] - x[0] >= duration, slotsA + slotsB))
        heapq.heapify(availableSlots)

        while len(availableSlots) > 1:
            s1, e1 = heapq.heappop(availableSlots)
            s2, e2 = availableSlots[0]
            if e1 >= s2 + duration:
                return [s2, s2 + duration]
        return []

The Python program presented solves the problem of finding a mutual available time slot for two participants given their individual availability and the duration of the meeting needed. The code performs the following steps:

  1. Merges the time slots of both participants into one list and filters out those slots that are shorter than the required meeting duration.

  2. Converts the list of available slots into a min-heap to efficiently find the earliest possible meeting time.

  3. Continuously checks pairs of slots starting from the earliest. For each pair, it checks if they overlap for at least the required duration. If such an overlap exists, it immediately returns the starting time of the meeting and the calculated end time.

  4. If no overlapping pairs are found that meet the duration requirement, the function returns an empty list, indicating no available meeting time could be found.

This solution efficiently manages time complexity by using a heap and reduces unnecessary comparisons, making it suitable for situations with potentially many available time slots.

Comments

No comments yet.