Leetcode 253. Meeting Rooms II 笔记

440 阅读1分钟

Medium

思路

  • 先把给定的数组按照开始时间的升序排列(arrays.sort,lambda), 保证每个interval结束之后能立刻跟着的是开始时间最早的interval。
  • 这样对于每个新来的interval,只用care这个interval的开始时间是否晚于上一个interval的结束时间。
  • 建立一个pq, 用来追踪最早结束的会议

过程

  • 排序数组, 建立pq, 把第一个interval的结束时间放进pq作为pre
  • 开始for循环,遍历每个interval
  • 先把新的interval的开始时间t和pq的peek比
  • 如果t>=peek, 说明有空房间, 则把当前pq peeek的最小值删掉,把当前新的end time offer进去。
  • 否则,说明没有空房间,要新安排一个,所以把该interval的结束时间再放进pq中。
  • 最后 pq的size就是房间数,返回

代码

class Solution {
    public int minMeetingRooms(int[][] intervals) {
        if(intervals.length == 0) return 0;
        
        Arrays.sort(intervals, (int[]a, int[]b) -> a[0] - b[0]);
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        pq.add(intervals[0][1]);
        
        for(int i = 1; i < intervals.length; i++){
            if(intervals[i][0] >= pq.peek()){
                pq.poll();
            }
             pq.add(intervals[i][1]);
        }
        System.out.println(pq);
        return pq.size();
    }
}