Appearance
题目描述
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;
}
}
AlgoPress