この解答例は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 ループをネストしないように注意することで、収益性を確保します。特定の時間に、各メンバーが非常に多数の予定を持っている場合は、計算量が増加する可能性があるため、それに注意することが重要です。