题解 | #主持人调度#
主持人调度
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();
} 