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]],
return 2.
Hide Company Tags Google Facebook
Hide Tags Heap Greedy Sort
Hide Similar Problems (H) Merge Intervals (E) Meeting Rooms
這題剛開始想着用個stack按照上一個結束時間和當前開始時間的關係in, out。不對。
看了大家的解法。 用map存儲所有start end point,並且++mp[start], –mp[end]. 因爲map 是ordered的, 最後traverse 所有elements in map 求room += m.second. 這樣做就可以知道最大重疊meeting的個數,也就可以求出我們到底最少需要多少meeting room。
class Solution {
public:
int minMeetingRooms(vector<Interval>& intervals) {
if(intervals.empty()) return 0;
map<int, int> mp;
for(Interval i : intervals){
++mp[i.start];
--mp[i.end];
}
int room = 0, maxRoom = INT_MIN;
for(auto m : mp){
maxRoom = max(maxRoom, room += m.second);
}
return maxRoom;
}
};