Last Commit: 2024-01-06 17:50:27

views:

Table of Content

253. Meeting Rooms II

source: https://leetcode.com/problems/meeting-rooms-ii/

Question

Given an array of meeting time intervals intervals where intervals[i] = [starti, endi], return the minimum number of conference rooms required.

思路

这道题的思路其实和真实分配房间的思路很相似:

  • 按开始的时间排序
  • 每次分配一个房间,排完为止
  • 继续下一次分配

其中在分配一个房间时会用上双指针的技巧。

在这里的核心其实是按开始时间排序,不然下一次会议开始的时间要大于上一次会议结束的时间,这个核心的判断逻辑是不成立的。

/**
 * @param {number[][]} intervals
 * @return {number}
 */
var minMeetingRooms = function (intervals) {
    let ret = 0;
    // 对会议开始的时间排序
    intervals.sort((a, b) => a[0] - b[0]);
    while (intervals.length) {
        // 分配一个新的会议室
        ret += 1;
        let p1 = 0;
        let p2 = 1;
        // 新会议室第一个肯定可以分配
        const remove = [p1];
        while (p2 < intervals.length) {
            const [start] = intervals[p2];
            // 下一次会议开始的时间要大于上一次会议结束的时间
            if (start >= intervals[p1][1]) {
                p1 = p2;
                remove.push(p1);
            }
            p2 += 1;
        }
        intervals = intervals.filter((_, index) => !remove.includes(index));
    }
    return ret;
};

总结

对于和分配/双指针有关的题目,排序一般是必不可少的。