1、前言
給定一個會議時間安排的數(shù)組过椎,每個會議時間都會包括開始和結(jié)束的時間 [[s1,e1],[s2,e2],…] (si < ei)室梅,為避免會議沖突,同時要考慮充分利用會議室資源疚宇,請你計算至少需要多少間會議室亡鼠,才能滿足這些會議安排。
示例 1:
輸入: [[0, 30],[5, 10],[15, 20]]
輸出: 2
示例 2:
輸入: [[7,10],[2,4]]
輸出: 1
2敷待、思路
排序 + 優(yōu)先隊列(最小堆)
- 將所有會議按照開始時間排序间涵,優(yōu)先隊列存儲會議的結(jié)束時間由小到大排序
- 對于當前的會議,如果開始時間小于優(yōu)先隊列元素的會議結(jié)束時間榜揖,就需要新開一個房間勾哩,因此將它重新入隊
- 最后優(yōu)先隊列剩余的就是最少的會議室數(shù)
3、代碼
class Solution {
public int minMeetingRooms(int[][] intervals) {
if(intervals == null || intervals.length == 0){
return 0;
}
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> a - b);
// 添加第一場會議的結(jié)束時間
pq.offer(intervals[0][1]);
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] >= pq.peek()){
// 如果當前會議的開始時間大于前面已經(jīng)開始的會議最晚結(jié)束時間
// 說明有會議室空閑举哟,可以重復(fù)使用思劳,那就得把原來的會議室刪除
pq.poll();
}
pq.offer(intervals[i][1]);
}
return pq.size();
}
}