Leetcode 253. 会议室 II

本文介绍了一种解决会议室资源调度问题的高效算法。通过使用最小堆维护会议结束时间,该算法能够计算出满足会议安排所需的最少会议室数量。适用于解决会议时间冲突及资源最大化利用的场景。

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

问题描述

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [ [ s 1 , e 1 ] , [ s 2 , e 2 ] ⋯   ] ( s i < e i ) [[s1,e1],[s2,e2]\cdots](s_i <e_i) [[s1,e1],[s2,e2]](si<ei) ,为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排
输 入 : [ [ 0 , 30 ] , [ 5 , 10 ] , [ 15 , 20 ] ] 输入:[[0, 30],[5, 10],[15, 20]] [[0,30],[5,10],[15,20]]
输 出 : 2 输出:2 2

解题报告

当一个会议室使用结束后,可以用于其他会议。
建一个最小堆,堆中保存每个会议的结束时间,每次从堆中取出一个元素:

  • 当该元素小于当前会议的起始时间时,表示目前有一个空会议室。将堆中元素弹出,并将当前会议的结束时间压入。
  • 当该元素大于当前会议的起始时间时,表示最早结束的会议室目前都不是空的,所以需要重新启用一个会议室。

最后看堆中有几个元素,则表示需要多少个会议室。

实现代码

class Solution {
public:
    int minMeetingRooms(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end());
        priority_queue<int, vector<int>, greater<int>> pq;
        int s,e;
        for(int i=0;i<intervals.size();i++){
            s=intervals[i][0];
            e=intervals[i][1];
            if(pq.size()==0){
                pq.push(e);
                continue;
            }
            if(pq.top()<=s){
                pq.pop();
            }
             pq.push(e);
        }
        return pq.size();
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值