LeetCode-预约会议室II

该博客介绍了如何使用排序和小根堆解决会议时间冲突问题。首先对会议开始时间进行排序,然后利用小根堆存储结束时间,实时检查当前开始时间是否大于等于堆顶的结束时间,若满足条件则弹出堆顶元素并更新最大重合会议数量。最终输出最大可参加会议的数量。

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

一、题目

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),请你判断一个人是否能够参加这里面的全部会议。

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

示例 2:
输入: [[7,10],[2,4]]
输出: true

二、思路

1、将会议室时间按开始时间从小到大排序
2、建立一个小根堆,存储结束时间
3、当当前开始时间大于等于top(之前的结束时间)时,弹出
然后添加当前结束时间到小根堆中,实时比较Que.size()
4、为什么当大于等于的时候要弹出呢,因为在这次弹出之前的上一次就已经记录了最大重合时间的个数

三、代码

int main()
{
    //vector<int> nums_1;
    vector<vector<int>> nums_2{vector<int>{2, 4}, vector<int>{3, 5}, vector<int>{4, 8}};
    sort(nums_2.begin(), nums_2.end());
    priority_queue<int, vector<int>, greater<int>> Que;
    int maxnum = 0;
    for (int i = 0; i < nums_2.size(); ++i)
    {
        while (!Que.empty() && nums_2[i][0] >= Que.top())
        {
            Que.pop();
        }
        Que.push(nums_2[i][1]);
        maxnum = maxnum > Que.size() ? maxnum : Que.size();
        //max(maxnum, Que.size());
    }
    cout << maxnum << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值