Skip to content
本页目录

题目描述

https://leetcode.cn/problems/meeting-rooms-ii

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。

示例 1:

输入:intervals = [[0,30],[5,10],[15,20]]
输出:2

示例 2:

输入:intervals = [[7,10],[2,4]]
输出:1

提示:

  • 1 <= intervals.length <= 10^4
  • 0 <= starti < endi <= 10^6

思路

将会议按照末尾排序,这样遍历会议的时候,如果发现其他的会议的开始时间,在这次会议的结束时间内,那么必然就需要增加一个会议室。 需要注意的是,如果增加了会议室之后,我们需要将结束的时间调整为当前两个会议的最小时间,因为这个会议室结束后,后面的会议其实可以复用这个会议室。 每次循环置空当前最大值,依次循环到最后的会议结束,最后取得最大值返回。

参考代码

csharp
public class Solution {
    public int MinMeetingRooms(int[][] intervals) {
        //将会议按照结束时间排序
        //然后遍历会议,看在这个会议其他会议开始的个数,如果累计总数就是当时需要的最大的会议个数
        //循环每一个会议直到会议结束
        Array.Sort(intervals , (a,b) => {
            return a[1].CompareTo(b[1]);
        });
        int max = 0;
        int curMax = 0;
        for(int i=0; i<intervals.Length; i++){
            curMax = 1;
            int end = intervals[i][1];
            for(int j=i+1;j<intervals.Length;j++){
                //如果后面会议的开始之间,还在前面会议的结束时间之前,则需要增加一个会议室
                if(intervals[j][0] < end){
                    end = Math.Min(end, intervals[j][1]);
                    curMax++;
                }
            }
            max = Math.Max(max,curMax);
        }
        return max;
    }
}

Released under the MIT License.