253.會議室Ⅱ
阿新 • • 發佈:2022-04-10
/*會議室Ⅱ*/ //思路: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(); } }