以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
82. 寻找合适开会的时间

可以先将所有成员的安排合并,并将相同时间段的安排合并。然后找出所有时间段的不重叠部分,这些部分就是全员都有空的时间段。

具体实现如下:

function findMeetingSlots(schedule) {
  // 合并成员的安排表
  const mergedSchedule = schedule
    .reduce((acc, memberSchedule) => {
      return acc.concat(memberSchedule);
    }, [])
    .sort((a, b) => a[0] - b[0]); // 按开始时间排序
  
  // 合并相同时间段的安排
  for (let i = 1; i < mergedSchedule.length; i++) {
    const prev = mergedSchedule[i-1];
    const curr = mergedSchedule[i];
    if (prev[1] >= curr[0]) {
      mergedSchedule[i-1] = [prev[0], Math.max(prev[1], curr[1])];
      mergedSchedule.splice(i, 1);
      i--;
    }
  }

  // 找出所有时间段的不重叠部分
  const result = [];
  if (mergedSchedule[0][0] !== 0) {
    result.push([0, mergedSchedule[0][0]]);
  }
  for (let i = 1; i < mergedSchedule.length; i++) {
    const prevEnd = mergedSchedule[i-1][1];
    const currStart = mergedSchedule[i][0];
    if (prevEnd !== currStart) {
      result.push([prevEnd, currStart]);
    }
  }
  if (mergedSchedule[mergedSchedule.length-1][1] !== 24) {
    result.push([mergedSchedule[mergedSchedule.length-1][1], 24]);
  }

  return result;
}

测试:

const schedule = [
  [[13,15], [11,12], [10,13]],
  [[8, 9]],
  [[13, 18]]
];
console.log(findMeetingSlots(schedule)); // [[0,8],[9,10],[18,24]]