优先队列

题目要求可以知道,主持人可以主持多场

但是有重复时间段的不能够同时主持,需要加主持人

优先队列保存从小到大的结束时间,每判读一个时间段就判断起始时间与队首的终止时间对比,若无重复能连续,则无需加主持人

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