美文网首页
253.会议室2

253.会议室2

作者: 水中的蓝天 | 来源:发表于2022-08-11 09:27 被阅读0次

253.会议室

题目:给定一个会议时间安排数组,每个会议时间都会包括开始和结束时间[[s1,e1][s2,e2]] (si < ei), 为避免会议冲突,同时要考虑充分利用会议室的资源,请你计算至少需要多少间会议室,才能满足这些会议安排

示例:
输入:[[0,30],[5,10],[15,20]]
输出:2

思路一:最小堆
给定一组会议时间,求最少需要开启多少间会议室能满足需要; 首先要对数组按开始时间做升序排序;其次需要一个数据结构来存储开启的会议;这里考虑用最小堆 (PriorityQueue) 来实现,因为最小堆查最小值得复杂度是O(1)


时间复杂度:   O(nlogn)
空间复杂度:O(n)

   public int minMeetingRooms(int[][] intervals) {
       //0.边界处理
       if(intervals==null||intervals.length==0) return 0;

       //1. 按照会议开始时间,升序排列 O(nlongn)
       Arrays.sort(intervals,(m1,m2)->m1[0]-m2[0]);
    
       //2. 创建最小堆(存放每一个会议的结束时间)
       PriorityQueue<Integer> heap = new PriorityQueue();
       //添加0号会议的结束时间
       heap.add(intervals[0][1]);

       //3. 遍历会议数组 求得需要开启的会议室间数
       for(int i = 1; i < intervals.length();i++) { //O(nlogn)

          /** 
          如果当前会议的开始时间 大于等于 最近会议的结束时间; 
          那就把最近会议移除 然后把当前会议的结束时间加最小堆 堆顶
          */
          if(intervals[I][0] >= heap.peek()) {//O(1)
             heap.remove(); //O(logn)
          }
          //将i号会议的结束时间加入堆中
          heap.add(intervals[i][1]);  //O(logn)
       }

       return heap.size();
    
   }
     
 思路二: 分开排序
 把开始时间做一个排序,再把结束时间做一个排序;遍历开始时间数组,取出每一个开始时间对比结束时间,看是否需要开启新的房间
     
     时间复杂度:   O(nlogn)
   空间复杂度:O(n)

   public int minMeetingRooms(int[][] intervals) {
       //0.边界处理
       if(intervals==null||intervals.length==0) return 0;

       //1. 创建两个数组分别记录开始和结束时间
       int[] begins = new int[intervals.length];
       int[] ends = new int[intervals.length];
       for(int i = 0;i < intervals.length;i++){
           begins[i] = intervals[i][0];
           ends[i] = intervals[i][1];
       }
       //排序
       Arrays.sort(begins);
       Arrays.sort(ends);

       int room = 0, endIdx = 0;
       //2. 遍历会议开始时间
       for(int begin : begins) {
           //可以重复利用会议室
           if(begin >= ends[endIdx]) {
               endIdx++;
           }else {//需要新开会议室
              room++;
           }
       }
       return room;
   }

     
    ```

相关文章

  • 253.会议室2

    253.会议室[https://leetcode.cn/problems/meeting-rooms-ii/] 题...

  • 253. 会议室 II

    253. 会议室 II[https://leetcode-cn.com/problems/meeting-room...

  • [中等] 253. 会议室 II

    欢迎关注 leetcode 专栏 题目 解法常规解法最小堆解法优先队列解法 题目 给定一个会议时间安排的数组,每个...

  • 253. Meeting Rooms II 会议室 II

    解法

  • 253.

    幸福的婚姻需要两个互相欣赏的人,这是先决条件。对于每一个人,想法都可能不同。对我来说,欣赏可能更多的是外貌和性格,...

  • 四级词汇

    251. moisture n. 潮湿 252. promote vt. 促进;提升 253. region n....

  • 253.小诗

    你来得有点迟,那会儿 我的人生差不多过了一半 有时我会想,如果 早些年遇见你 我 会不会是更好的我自己? 我于是...

  • 253.开奖

    今天是开奖的日子,结果是好的,感恩。 我前几天的状态不太好,不过现在细细想来那些天的辗转反侧、揪心焦灼也是一段特别...

  • Xmpp第三篇

    简述 资源 1.创建会议室 2.邀请好友入会议室 3.进入会议室 4.会议室踢人(群主才行) 5.销毁会议室 结束语

  • LeetCode-会议室2

    会议室2给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] ...

网友评论

      本文标题:253.会议室2

      本文链接:https://www.haomeiwen.com/subject/xjetirtx.html