题目说明
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排
输入: [[0, 30],[5, 10],[15, 20]]
输出: 2
链接:https://leetcode-cn.com/problems/meeting-rooms-ii
分析:
1、排序:按照会议开始时间进行排序,使用sort()方法,注意第三个参数的写法(一般都用lamda)。被坑的很惨。
2、定义一个按照升序排列的priorty_queue队列,第三个参数使用greater.如果是降序排列,则使用less
3、比较当前会议的开始时间和priorty_queue队列中最早结束的会议时间,做如下操作:
如果当前会议开始时间>=最早的会议结束时间:不需要新增会议室。将最早的会议结束时间更新为当前会议的结束时间
如果当前会议开始时间<最早的会议结束时间:则需要新增会议室。将当前会议技术间push到priority_queue队列中
4、全部比较完成之后:priority_queue队列的size就是需要的会议室个数。
int minMeetingRooms(vector<vector<int>>& intervals)
{
if (intervals.size() < 2)
{
return intervals.size();
}
sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b) {return a[0] < b[0]; });
priority_queue<int, vector<int>, greater<int>> q; //升序的堆
q.push(intervals[0][1]);
for (int i = 1; i < intervals.size(); i++)
{
if (intervals[i][0] >= q.top())
{
q.pop();
q.push(intervals[i][1]);
}
else
{
q.push(intervals[i][1]);
}
}
return q.size();
}