• 253. Meeting Rooms II 需要多少间会议室


    [抄题]:

    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.

    For example,
    Given [[0, 30],[5, 10],[15, 20]],
    return 2.

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    首尾时间衔接上了,就业只需要一间

    [思维问题]:

    [一句话思路]:

    结束时间每次都取最小的,所以用heap来维持

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. heap中添加元素用的是吉利的offer方法,接口和具体实现用的是PQ

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    首尾时间衔接上了,就业只需要一间

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [算法思想:递归/分治/贪心]:

    [关键模板化代码]:

    heap模板:长度+三层:

    括号是空的表示构造函数

    / Use a min heap to track the minimum end time of merged intervals
        PriorityQueue<Interval> heap = new PriorityQueue<Interval>(intervals.length, new Comparator<Interval>() {
            public int compare(Interval a, Interval b) { return a.end - b.end; }
        });

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    /**
     * 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) {
            //cc : null
            if (intervals == null || intervals.length == 0) return 0;
            
            //ini : sort start, min heap for end, offer
            Arrays.sort(intervals, new Comparator<Interval>(){public int compare(Interval a, Interval b) 
                                                            {return a.start - b.start;}});
            
            PriorityQueue<Interval> heap = new PriorityQueue<Interval>(intervals.length, new Comparator<Interval>()
                                                     {public int compare(Interval a, Interval b) {return a.end - b.end;}});
            
            //for loop
            heap.offer(intervals[0]);
            for (int i = 1; i < intervals.length; i++) {
                //poll
                Interval curr = heap.poll();
                
                //compare end
                if (intervals[i].start >= curr.end) {
                    curr.end = intervals[i].end;
                }else {
                    heap.add(intervals[i]);
                }
                
                //put back
                heap.offer(curr);
            }
            
            return heap.size();
        }
    }
    View Code
  • 相关阅读:
    3-2 表的增删改查
    3-1 存储引擎的介绍
    2-1 库的增删改查
    1-4 初识sql语句
    1-3 mysql的安装和基本管理
    1-2 数据库概述
    1-1 数据库管理软件的由来
    4-6 IO模型对比
    《测试软件工程师》11,13 测试用例格式
    《软件测试工程师》10 测试环境搭建
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9011014.html
Copyright © 2020-2023  润新知