题解 | #主持人调度#
主持人调度
http://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299
优先队列
题目要求可以知道,主持人可以主持多场
但是有重复时间段的不能够同时主持,需要加主持人
优先队列保存从小到大的结束时间,每判读一个时间段就判断起始时间与队首的终止时间对比,若无重复能连续,则无需加主持人
public int minmumNumberOfHost (int n, int[][] startEnd) { if(n <= 1){ return n; } // 首先安装开始时间排序,开始时间相等的按照截至时间排序 Arrays.sort(startEnd , (o1 ,o2) -> { return o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]; }); // 保存每一个时间段的终止时间,从小到大 PriorityQueue<Integer> queue = new PriorityQueue<>(); for(int i = 0 ; i < n ; i++){ // 若当前时间段的开始时间大于了队首的终止时间,那么队首的主持人可以继续主持这个,不用加人 if(!queue.isEmpty() && queue.peek() <= startEnd[i][0]){ queue.poll(); } queue.offer(startEnd[i][1]); } return queue.size(); }