[LeetCode253]Meeting Rooms II

SharonMoMo發表於2015-11-25
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;
    }
};

相關文章