/*会议室Ⅱ*/
//思路:1.先根据每个会议开始的时间进行排序,将开始时间最早的会议加入小根堆(小根堆的每个元素即代表一个会议室,让最早开始的会议占据一个会议室)
// 2.对二维数组([beginTime1,endTime1][beginTime2,endTime2][beginTime3,endTime3]...)的beginTIme进行扫描,将beginTIme与当前堆顶的值(堆顶的值即为若正在进行会议的干会议室中结束时间最早的会议,若结束时间最早的会议都满足不了当前会议的开始时间,即interval[i][0]<res.peek(),就说明没有符合的会议室,需要再开一间会议室)进行比较,若当前的结束时间大于堆顶的值(即新会议发生在旧会议结束时间之后),则将堆顶元素删除,加入新会议的最后结束时间(即代表该会议室已经被这个会议占用了)。
class Solution {
public int minMeetingRooms(int[][] intervals) {
if(intervals.length==0)return 0;
PriorityQueue<Integer>res=new PriorityQueue<Integer>(
intervals.length,
new Comparator<Integer>(){
public int compare(Integer a,Integer b){
return a-b;
}
}
);
Arrays.sort(
intervals,
new Comparator<int []>(){
public int compare(final int[] a,final int [] b){
return a[0]-b[0] ;
}
}
);
res.add(intervals[0][1]);
for(int i=1;i<intervals.length;i++){
if(intervals[i][0]>= res.peek()) res.poll();
res.add(intervals[i][1]);
}
return res.size();
}
}