zoukankan      html  css  js  c++  java
  • leetcode253

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum number of conference rooms required.
    Example 1:
    Input: [[0, 30],[5, 10],[15, 20]]
    Output: 2
    Example 2:
    Input: [[7,10],[2,4]]
    Output: 1

    最小堆。O(nLogn), O(n)
    预处理:先把interval按照interval的start从小到大排好序。开一个最小堆,使得堆顶是end最小的interval。
    遍历intervals,把当前interval的start和堆顶的end对比,如果交叉,说明不能用最早结束的会议室从而要重开一个新房间,入当前,heap.size()多了1说明多一个会议室;如果不交叉,说明可以之前那个房间开会的人走了我可以直接用那个房间了,出堆顶入当前,heap.size()不变说明不用多会议室。
    返回的答案也就是这个过程中heap.size()的巅峰值,打擂台得到。

    实现

    /**
     * Definition for an interval.
     * public class Interval {
     *     int start;
     *     int end;
     *     Interval() { start = 0; end = 0; }
     *     Interval(int s, int e) { start = s; end = e; }
     * }
     */
    class Solution {
        public int minMeetingRooms(Interval[] intervals) {
            if (intervals == null || intervals.length == 0) {
                return 0;
            }
            Arrays.sort(intervals, new Comparator<Interval>() {
                @Override
                public int compare(Interval a, Interval b) {
                    return a.start - b.start;
                }
            });
            
            PriorityQueue<Interval> minHeap = new PriorityQueue<>(new Comparator<Interval>() {
                @Override
                public int compare(Interval a, Interval b) {
                    return a.end - b.end;
                }
            });
            
            int ans = 1;
            minHeap.offer(intervals[0]);
            for (int i = 1; i < intervals.length; i++) {
                int earliestEnd = minHeap.peek().end;
                if (intervals[i].start >= earliestEnd) {
                    minHeap.poll();
                    minHeap.offer(intervals[i]);
                } else {
                    minHeap.offer(intervals[i]);
                }
                ans = Math.max(ans, minHeap.size());
            }
            return ans;
            
        }
    }
  • 相关阅读:
    Android之json解析
    关闭Android/iPhone浏览器自动识别数字为电话号码
    CSS 公共样式摘自万能的度娘
    前端必备:六款CSS工具让代码充满魅力
    移动端JS 触摸事件基础
    height:100%和height:auto的区别
    线程之生产汽车与购买汽车
    SAXCreateXMLDocument
    DOM方式创建XML文件
    java快捷键
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/9650605.html
Copyright © 2011-2022 走看看