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