以下为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]]