【LeetCode253.会议室Ⅱ】

题目链接

253. 会议室 II - 力扣(LeetCode)

题目描述

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

思路

  1. 首先将会议按照会议开始时间排序;
  2. 定义一个优先队列,存放会议结束时间,顶部是目前最快的结束时间;
  3. 每次判断新的会议安排的开始时间是否不早于目前最快结束的会议时间,如果不早于就可以直接用已经结束会议的会议室,而不需要新的会议室;否则,需要新的会议室。

代码实现

#include <bits/stdc++.h>
using namespace std;

int minMeetingRooms(vector<vector<int>>& intervals) {
    // 按照会议开始时间排序
    sort(intervals.begin(), intervals.end());
    priority_queue<int, vector<int>, greater<>> pq; // 存会议结束时间,顶部是最小元素
    pq.push(intervals[0][1]);
    for (int i = 1; i < intervals.size(); i++) {
        if (pq.top() <= intervals[i][0]) {
            pq.pop();
        }
        pq.push(intervals[i][1]);
    }
    return pq.size();
}

int main() {
    vector<vector<int>> intervals = {{0,30},{5,10},{15,20}};
    // vector<vector<int>> intervals = {{7,10},{2,4}};
    cout << minMeetingRooms(intervals) << endl;
    return 0;
}

其他

也可以每次都把已经结束的会议删除,最后的结果是每次队列大小的最大值。

#include <bits/stdc++.h>
using namespace std;

int minMeetingRooms(vector<vector<int>>& intervals) {
    // 按照会议开始时间排序
    sort(intervals.begin(), intervals.end());
    priority_queue<int, vector<int>, greater<>> pq; // 存会议结束时间,顶部是最小元素
    pq.push(intervals[0][1]);
    int ans = 1;
    for (int i = 1; i < intervals.size(); i++) {
        while (pq.size() > 0 && pq.top() <= intervals[i][0]) {
            pq.pop();
        }
        pq.push(intervals[i][1]);
        ans = max(ans, (int)pq.size());
    }
    return ans;
}

int main() {
    // vector<vector<int>> intervals = {{0,30},{5,10},{15,20}};
    vector<vector<int>> intervals = {7,10},{2,4}};
    cout << minMeetingRooms(intervals) << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值