【NO.71】LeetCode HOT 100— 253. 会议室 II

本文介绍了如何使用小顶堆、上车下车方法以及哈希表解决会议室II问题,即给定会议时间区间,计算最少需要多少会议室。通过比较开始时间和结束时间,确保在每个区间结束时更新会议室需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

253. 会议室 II

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。

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

示例 2:
输入:intervals = [[7,10],[2,4]]
输出:1

提示:
1 <= intervals.length <= 104
0 <= starti < endi <= 106

解题

此题本质上还是比较一个会议的结束时间 和 下一个会议的开始时间的关系,如果结束时间大于开始时间,则需要的会议室数就加1。所以我们需要先按开始时间排序,然后遍历,比较结束时间与开始时间

方法一:利用小顶堆

小根堆的元素数量表示从开始到结束这个范围上重合的区间的最大值; 本质上就是求开始到结束范围上的重合区间数量最大值。
思路:先把数组按照开始时间升序,然后使用最小堆的元素个数表示重叠的区间数量; 堆中压入结束时间; 如果当前的开始时间大于等于最小堆堆顶的结束时间, 说明有一个会议开完了, 弹出堆顶元素

class Solution {
   
    public int minMeetingRooms(int[][] intervals) {
   
        //对数组按照开始时间升序排序
        Arrays.sort(intervals, (a,b)->a[0]-b[0]);
        
        //最小堆中存放结束时间; 最小堆中的元素数量表示从开始到结束重合的区间数量的最大值
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();
        for(int i=0; i<intervals.length; i++){
   
            //如果最小堆不为空,并且当前时间段的开始时间大于等于堆顶元素, 说明之前有个会议结束了, 弹出该堆顶元素, 表示会议室数量减一
            if(!minHeap.isEmpty() && intervals[i][0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬浮海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值