LeetCode 253. 会议室 II

LeetCode 253. 会议室 II

文章目录

  • LeetCode 253. 会议室 II
  • 题目描述
  • 一、解题关键词
  • 二、解题报告
    • 1.思路分析
    • 2.时间复杂度
    • 3.代码示例
    • 2.知识点
  • 总结

题目描述

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:2

会议室 II
提示:

    1 <= intervals.length <= 104
    0 <= starti < endi <= 106

一、解题关键词


二、解题报告

1.思路分析

最小数量 联想到贪心 动态规划
但是这个牵扯到数组排序 所以没有办法使用动态规划
肯定会使用到排序
分别按照开始时间和结束时间进行排序两个数组
结束时间没有到达就需要新建会议室 放到队列中
最后求出队列容量

2.时间复杂度

3.代码示例

class Solution {
    public int minMeetingRooms(int[][] intervals) {
        //优先队列实现会议室开始排序 

        int rowLen = intervals.length;
        int colLen = intervals[0].length;
        if(rowLen == 0){return 0;}
        //队列2 结束时间排序 没有结束就新建一个会议室 最后堆容量就是会议室数量 
        PriorityQueue<Integer> allocator = new PriorityQueue<Integer>(rowLen,new Comparator<Integer>(){
            public int compare (Integer a,Integer b){
                return a - b;
            }
        });

        Arrays.sort(intervals,new Comparator<int[]>(){
            public int compare(final int [] a,final int [] b){
                return a[0] - b[0];
            }
        });

        allocator.add(intervals[0][1]);
        for(int i = 1;i < intervals.length;i++){
            if(intervals[i][0] >= allocator.peek()){
                allocator.poll();
            }
            allocator.add(intervals[i][1]);
        }
        return allocator.size();
    }
}

2.知识点

拆分问题很重要,会议开始时间和结束时间 是关键要素

总结

你可能感兴趣的:(LeetCode解题报告,优先队列,堆排,java,力扣,算法)