Meeting Rooms II

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求

Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],…] (si < ei), find the minimum number of conference rooms required.

Example 1:
Input: [[0, 30],[5, 10],[15, 20]]
Output: 2

Example 2:
Input: [[7,10],[2,4]]
Output: 1

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

给定由开始和结束时间[[s1,e1],[s2,e2],…](si <ei)组成的会议时间间隔数组,找到所需的最小会议室数。

2,题目思路

对于这道题,比较蛋疼的一点是,这道题是被锁住的,必须订阅才能做。然而并没有钱去订阅这个LeetCode,所以,只能从别人的博客了解这道题了。

这道题的意思,是给定一系列会议的开会时间区间,判断一共需要多少个会议室。
简单来说,就是一个活动安排问题。

如果我们手动去操作,会比较简单,主要就是个时间窗安排问题。
而在实现上,我们可以使用map作为我们的主要容器,并利用其自动排序的特点。在对会议进行遍历时,对开始的时间,我们标记为1,对结束的时间,我们则标记为-1。
然后,从左往右按照时间顺序进行遍历并进行累加即可。

比如对于[0,5][10,15],我们在遍历时可以看到,遍历到0,res+1,遍历到5,res则-1,然后遍历到10,res+1,遍历到15,res-1。
我们只需要记录res的最大值即可。

再比如[0,10][2,7],我们在遍历时,先0,再2,res变成2,最大值也就变成2。实际上,也是需要2个会议室。

3,代码实现

class Solution {
public:
	int minMeetingRooms(vector<Interval> &intervals){
		map<int, int> meetingTimeMap;
		for(auto &a :intervals){
			meetingTimeMap[a.start]++;	//开始时间
			meetingTimeMap[a.end]--;	//结束时间
		}
		int res = 0, rooms = 0;
		for(auto &m : meetingTimeMap){
			rooms += m.second;
			res = max(res, rooms);
		}
		return res;
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值