Description:
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:
For example,
Given [[0, 30],[5, 10],[15, 20]]
,
return 2
.
Link:
https://leetcode.com/problems/meeting-rooms-ii/description/
解題方法:
先記錄每個interval開始和結束所需要的房間數(shù)纯丸,當開始時脉幢,需要的房間數(shù)為1抡蛙,而結束時,需要的房間數(shù)為-1专酗;
再遍歷一遍以上記錄的數(shù)組八秃,這樣所需的房間數(shù)會隨著以上的記錄不斷的變化誓禁,用一個變量去記錄隨時變化的房間數(shù)出現(xiàn)的最大值就是我們所求的值唇牧。
Tips:
用map作為儲存結構,就會按照時間的先后來儲存每個時間點需要的房間數(shù)抵屿。
Time Complexity:
因為map的遍歷并不是O(N)庆锦,所以時間為O(NlogN)。
完整代碼:
int minMeetingRooms(vector<Interval>& intervals)
{
map<int, int> hash;
for(auto a: intervals)
{
hash[a.start]++;
hash[a.end]--;
}
int currRoom = 0, maxRoom = 0;
for(auto a: hash)
{
currRoom += a.second;
maxRoom = currRoom > maxRoom ? currRoom : maxRoom;
}
return maxRoom;
}