Medium
思路
- 先把给定的数组按照开始时间的升序排列(arrays.sort,lambda), 保证每个interval结束之后能立刻跟着的是开始时间最早的interval。
- 这样对于每个新来的interval,只用care这个interval的开始时间是否晚于上一个interval的结束时间。
- 建立一个pq, 用来追踪最早结束的会议
过程
- 排序数组, 建立pq, 把第一个interval的结束时间放进pq作为pre
- 开始for循环,遍历每个interval
- 先把新的interval的开始时间t和pq的peek比
- 如果t>=peek, 说明有空房间, 则把当前pq peeek的最小值删掉,把当前新的end time offer进去。
- 否则,说明没有空房间,要新安排一个,所以把该interval的结束时间再放进pq中。
- 最后 pq的size就是房间数,返回
代码
class Solution {
public int minMeetingRooms(int[][] intervals) {
if(intervals.length == 0) return 0;
Arrays.sort(intervals, (int[]a, int[]b) -> a[0] - b[0]);
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(intervals[0][1]);
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] >= pq.peek()){
pq.poll();
}
pq.add(intervals[i][1]);
}
System.out.println(pq);
return pq.size();
}
}