Meeting Rooms
Given an array of meeting time intervals consisting of start and end times
[[s1,e1],[s2,e2],...]
(si < ei), determine if a person could attend all meetings.For example,
Given[[0, 30],[5, 10],[15, 20]]
,
returnfalse
.
Meeting Rooms II
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.For example,
Given[[0, 30],[5, 10],[15, 20]]
,
return2
.
extract start point and end points from intervals.
Sort points by their time. If the time of two points are equal, arrange end point before start point.
traverse the sorted array,
if we meet a start point, count++, otherwise count–;
maxRooms stores the maximum value count ever appears.
/** * 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: int minMeetingRooms(vector<Interval>& intervals) { vector<pair<int, bool>> points; for(auto interval: intervals){ points.push_back({interval.start, true}); points.push_back({interval.end, false}); } sort(points.begin(), points.end(), [](pair<int, bool>& a, pair<int, bool>& b){ if(a.first < b.first){ return true; } else if(a.first > b.first){ return false; } else{ return a.second == false; //end point is ordered before start point } }); int count = 0; int maxRooms = 0; for(auto point: points){ if(point.second == true){ count++; } else{ count--; } maxRooms = max(count, maxRooms); } return maxRooms; } };