この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
82. 会議の開く時間を探す
解法例:
function findMeetingSlots(schedule) {
// インプットをソートして処理をしやすくする。
schedule.forEach(memberSchedule => {
memberSchedule.sort((a, b) => a[0] - b[0]);
});
const freeSlots = [];
// 最小のスタート時間を見つける
let currentMin = schedule[0][0][0];
// 終了時間
let currentMax = schedule[0][0][1];
// メンバーの数
const numMembers = schedule.length;
for (let currentTime = 0; currentTime <= 24; currentTime++) {
let isBusy = false;
for (let i = 0; i < numMembers; i++) {
const memberSchedule = schedule[i];
// Member 1,8
// StartTime = 9
// EndTime = 10
// if (StartTime(9) < myTime(9) && EndTime(10) > myTime(9)){}
for (let j = 0; j < memberSchedule.length; j++) {
const [memberStart, memberEnd] = memberSchedule[j];
if (currentTime >= memberStart && currentTime < memberEnd) {
isBusy = true;
break;
}
}
if (isBusy) {
break;
}
}
if (!isBusy) {
currentMax = currentTime;
// Free slot!
if (currentTime > currentMin) {
freeSlots.push([currentMin, currentMax]);
}
currentMin = currentTime;
}
}
// もし、最後の状態が空きなしで、なおかつ 24 で終わっていない場合は、24 時間中の時間を保存します。
if (currentMax !== 24) {
freeSlots.push([currentMin, 24]);
}
return freeSlots;
}
注意点:
この関数では、最初にインプットをソートすることで処理を簡素化しています。
また、for ループをネストしないように注意することで、収益性を確保します。特定の時間に、各メンバーが非常に多数の予定を持っている場合は、計算量が増加する可能性があるため、それに注意することが重要です。