1. 程式人生 > 其它 >253.會議室Ⅱ

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();
    }
}