0
点赞
收藏
分享

微信扫一扫

leetcode 253. 会议室II

问题描述

给定一系列会议时间,判断一个会议室是否能够容纳所有会议。每个会议都有一个开始和结束时间。

输入: 一个二维数组 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个会议的开始和结束时间。

输出: 如果会议室可以容纳所有会议,返回 true;否则返回 false

解法一

解题思路:

我们需要找出所有会议的重叠部分。如果存在重叠,则返回 false

  1. 首先,将所有会议按照开始时间进行排序。
  2. 然后,遍历排序后的会议,对于每个会议,检查其结束时间是否与前一个会议的结束时间重叠。
  3. 如果没有重叠,则更新当前会议的结束时间为最大结束时间。
  4. 如果存在重叠,则返回 false
/*
 * @lc app=leetcode.cn id=253 lang=javascript
 *
 * [253] 会议室II
 */

// @lc code=start
function minMeetingRooms(intervals) {
  if (intervals.length === 0) return false;

  intervals.sort((a, b) => a[0] - b[0]);
  let rooms = 1;
  let maxRooms = 1;
  let endTimes = [intervals[0][1]];

  for (let i = 1; i < intervals.length; i++) {
    if (intervals[i][0] < endTimes[0]) {
      // 需要新的会议室
      rooms++;
      maxRooms = Math.max(maxRooms, rooms);
      endTimes.unshift(intervals[i][1]);
    } else {
      // 找到结束时间最早的会议,更新结束时间
      let index = findIndex(endTimes, intervals[i][0]);
      endTimes[index] = Math.max(endTimes[index], intervals[i][1]);
    }
  }

  return maxRooms <= intervals.length;
}

function findIndex(endTimes, startTime) {
  for (let i = 0; i < endTimes.length; i++) {
    if (endTimes[i] <= startTime) return i;
  }
  return -1;
}
// @lc code=end
举报

相关推荐

0 条评论