问题描述
给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:2
示例 2:输入:intervals = [[7,10],[2,4]]
输出:1
提示:
1 <= intervals.length <= 104
0 <= starti < endi <= 106来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/meeting-rooms-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Java 小顶堆
class Solution {
public int minMeetingRooms(int[][] intervals) {
//没有会议时间就不用会议室
if(intervals.length == 0) return 0;
int len = intervals.length;
//创建小顶堆,用会议的结束时间
PriorityQueue<Integer> minHeap = new PriorityQueue<>((a,b) -> a - b);
//按照会议的开始时间进行排序
Arrays.sort(intervals,(a,b) -> a[0] - b[0]);
//将第一个会议的结束时间添加进去
minHeap.offer(intervals[0][1]);
for(int i = 1;i < len;i++){
//当前会议的开始时间大于堆中的结束时间,可以直接用这个会议室,不用新开会议室
if(intervals[i][0] >= minHeap.peek()){
minHeap.poll();
minHeap.offer(intervals[i][1]);
}else {
minHeap.offer(intervals[i][1]);
}
}
//会议室的个数
return minHeap.size();
}
}