【leetcode】253. 會(huì)議室 II
給定一個(gè)會(huì)議時(shí)間安排的數(shù)組,每個(gè)會(huì)議時(shí)間都會(huì)包括開始和結(jié)束的時(shí)間 [[s1,e1],[s2,e2],…] (si < ei),為避免會(huì)議沖突,同時(shí)要考慮充分利用會(huì)議室資源,請你計(jì)算至少需要多少間會(huì)議室,才能滿足這些會(huì)議安排。
示例 1:
輸入: [[0, 30],[5, 10],[15, 20]]
輸出: 2
示例 2:
輸入: [[7,10],[2,4]]
輸出: 1
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/meeting-rooms-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
思路
首先進(jìn)行一下排序,然后用一個(gè)小頂堆,維護(hù)當(dāng)前每個(gè)會(huì)議室的結(jié)束時(shí)間,
然后當(dāng)一個(gè)新的時(shí)間安排出現(xiàn)的時(shí)候,只需要判斷一下是否需要新申請一個(gè)會(huì)議室,還是繼續(xù)使用之前的會(huì)議室。
代碼
class Solution {
public:
int minMeetingRooms(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>&b){
return a[0] < b[0];
});
priority_queue<int, vector<int>, greater<int>> heap;
for (int i = 0; i < intervals.size(); i++) {
if (!heap.empty() && heap.top() <= intervals[i][0]) {
heap.pop();
}
heap.push(intervals[i][1]);
}
return heap.size();
}
};
總結(jié)
沒啥東西。。