题目描述:
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
将区间按照起点排序,遍历所有区间,依次将区间终点插入集合中,如果集合的第一个元素值小于当前区间的起点,说明当前区间可以使用这个会议室,否则说明所有会议室的结束时间都大于当前区间的开始时间,此时需要增加一个会议室。
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool comp(Interval a, Interval b)
{
if(a.start <= b.start) return true;
else return false;
}
int minMeetingRooms(vector<Interval>& intervals) {
sort(intervals.begin(), intervals.end(), comp);
multiset<int> s;
for(int i = 0; i < intervals.size(); i++)
{
if(s.size() > 0 && *s.begin() <= intervals[i].start) s.erase(s.begin());
s.insert(intervals[i].end);
}
return s.size();
}
};