Find meeting time slots where all participants are available

Find time slots when all people are free from their calendar

Velu S Gautam1 min readInterviews

Given time schedules in the form of (startTime - endTime) of n people, print all time intervals where all n participants are available. It's like a meeting application suggesting possible time when we can do a company meeting when all employees are free

This is an interview problem asked in major tech companies like Google, Amazon, AirBnb, Databricks etc.

Below I am giving the brute force solution in javascript how to solve this. Later I will be giving an optimal solution

JAVASCRIPT
/**
 * getFreeMeetingTime to find free time slots in a day for a common meeting
 * 
 * @param {array[array]} allPeople An array of arrays of time slots
 */
function getFreeMeetingTime(allPeople) {
  // get a range of time in a day.
  // you can pass the min and max from the input if its not 0 to 24 hrs
  const allTimeSlotsInDay = getAllTimeSlots();
  let tempResult = [];
  
  for (const person of allPeople) {
    for (const time of person) {
      for (
        let i = Number(time.split('-')[0]);
        i < Number(time.split('-')[1]);
        i++
      ) {
        const val = `${i}-${i + 1}`;
        if (!tempResult.includes(val)) {
          tempResult.push(val);
        }
      }
    }
  }
  // merge the times in between. ex '4-5', '5-6' to '4-6'
  return mergeTime(
    allTimeSlotsInDay.filter((time) => !tempResult.includes(time))
  );
}

function mergeTime(timeArray) {
  const result = [];
  let i = 0;
  while (i < timeArray.length) {
    const arr = timeArray[i].split('-');
    let start = Number(arr[0]);
    let end = Number(arr[1]);
    let counter = 0;
    for (let j = i + 1; j < timeArray.length; j++) {
      const jarr = timeArray[j].split('-');
      const jstart = Number(jarr[0]);
      const jend = Number(jarr[1]);

      if (end == jstart || end >= jstart) {
        end = jend;
        counter++;
      }
    }

    i = counter === 0 ? ++i : i + counter + 1;
    result.push(`${start}-${end}`);
  }
  return result;
}

function getAllTimeSlots() {
  const result = [];
  for (let i = 0; i < 24; i = i + 1) {
    result.push(`${i}-${i + 1}`);
  }
  return result;
}

/**
 * Creating a sample data to test
 */

//sample time slots of persons where they are busy
const person_1 = ['4-16', '18-24'];
const person_2 = ['2-14', '17-24'];
const person_3 = ['6-8', '12-20'];
const person_4 = ['10-22'];

// Getting an array of time schedules where people are busy.
const allPeople = [person_1, person_2, person_3, person_4];

// get data back to result
const result = getFreeMeetingTime(allPeople);

console.log(result);

Comments