一、题目
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[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;
}