题解 | #主持人调度#
主持人调度
http://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299
/* 按照 开始时间 对会议进行排序。 初始化一个新的 最小堆,将第一个会议的结束时间加入到堆中。我们只需要记录会议的结束时间,告诉我们什么时候房间会空。 对每个会议,检查堆的最小元素(即堆顶部的房间)是否空闲。 若房间空闲,则从堆顶拿出该元素,将其改为我们处理的会议的结束时间,加回到堆中。 若房间不空闲。开新房间,并加入到堆中。 处理完所有会议后,堆的大小即为开的房间数量。这就是容纳这些会议需要的最小房间数。 */ public int minmumNumberOfHost (int n, int[][] startEnd) { // write code here if(startEnd == null || startEnd.length == 0) return 0; Arrays.sort(startEnd, (o1,o2)->{ if(o1[0] == o2[0]) return o1[1] - o2[1]; return o1[0] - o2[0]; }); PriorityQueue<Integer> minQ = new PriorityQueue<Integer>(startEnd.length,(o1,o2)->{ return o1-o2; }); minQ.add(startEnd[0][1]); for(int i = 1; i < startEnd.length ; i ++){ if(startEnd[i][0] >= minQ.peek()) minQ.poll(); minQ.offer(startEnd[i][1]); } return minQ.size(); }