253.会议室Ⅱ

/*会议室Ⅱ*/
//思路: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();
    }
}
posted @ 2022-04-09 22:59  ftwftw  阅读(82)  评论(0)    收藏  举报