LeetCode_会议室Ⅱ

题目说明

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

发布了63 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/luncy_yuan/article/details/104211353