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