DEV Community

Bukunmi Odugbesan
Bukunmi Odugbesan

Posted on

Coding Challenge Practice - Question 52

The task is to implement findMeetingSlots(schedules) that finds available meeting slots for all members to have a meeting, given their busy schedules.

The boilerplate code

function findMeetingSlots(schedules) {
  // your code here
}
Enter fullscreen mode Exit fullscreen mode

Flatten all members' schedules into one array

let allBusy = schedules.flat();
Enter fullscreen mode Exit fullscreen mode

Sort the schedules by start time.

allBusy.sort((a, b) => a[0] - b[0]);
Enter fullscreen mode Exit fullscreen mode

Merge overlapping time intervals

 let merged = [];
  for (let interval of allBusy) {
    if (!merged.length || merged[merged.length - 1][1] < interval[0]) {
      merged.push(interval);
    } else {
      merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1]);
    }
  }
Enter fullscreen mode Exit fullscreen mode

Find the gaps between the merged busy intervals - these are the available meeting slots

let available = [];
  let start = 0;
  for (let [s, e] of merged) {
    if (start < s) available.push([start, s]);
    start = e;
  }
Enter fullscreen mode Exit fullscreen mode

Add the final available slot until 24

if (start < 24) available.push([start, 24]);
Enter fullscreen mode Exit fullscreen mode

The final code:

function findMeetingSlots(schedules) {
  // your code here
  let allBusy = schedules.flat();

  allBusy.sort((a,b) => a[0] - b[0]);

  let merged = [];
  for(let interval of allBusy) {
    if(!merged.length || merged[merged.length - 1][1] < interval[0]) {
      merged.push(interval)
    } else {
      merged[merged.length - 1][1] = Math.max(merged[merged.length - 1][1], interval[1])
    }
  }

  let available = [];
  let start = 0;
  for(let[s,e] of merged) {
    if(start < s) available.push([start,s]);
    start = e;
  }
  if (start < 24) available.push([start, 24]);

  return available;
}
Enter fullscreen mode Exit fullscreen mode

That's all folks!

Top comments (0)