LeetCode—253.會議室 II(Meeting Rooms II)——分析及程式碼(C++)
一、題目
給定一個會議時間安排的陣列,每個會議時間都會包括開始和結束的時間 [[s1,e1],[s2,e2],…] (si < ei),為避免會議衝突,同時要考慮充分利用會議室資源,請你計算至少需要多少間會議室,才能滿足這些會議安排。
示例 1:
輸入: [[0, 30],[5, 10],[15, 20]]
輸出: 2
示例 2:
輸入: [[7,10],[2,4]]
輸出: 1
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/meeting-rooms-ii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
二、分析及程式碼
1. 起止時間分別排序
(1)思路
設計兩個向量,分別記錄所有會議的 開始時間 和 結束時間 並排序,用兩個整數分別記錄當前的 會議室數量 及 空餘會議室數量。
遍歷 開始時間,依次處理:
1)有 結束時間 < 當前開始時間,空餘會議室數量++,指標指向下一 結束時間;
2)若 空餘會議室數量 = 0,會議室數量++;
3)若 空餘會議室數量 != 0,空餘會議室數量–;
因為排序後陣列一定滿足 第 i 個開始時間 < 第 i 個結束時間,過程不會出錯。
(2)程式碼
class Solution {
public:
int minMeetingRooms(vector<vector<int>>& intervals) {
if (intervals.empty())
return 0;
vector<int> begin_time(intervals.size());//所有會議的開始時間
vector<int> end_time(intervals.size());//所有會議的結束時間
for (int i = 0; i < intervals.size(); i++) {
begin_time[i] = intervals[i][0];
end_time[i] = intervals[i][1];
}
sort(begin_time.begin(), begin_time.end());
sort(end_time.begin(), end_time.end());
int room = 0, free_room = 0, endnum = 0;//會議室數量,空餘會議室數量,已結束的會議個數
for (int i = 0; i < intervals.size(); i++) {
int time = begin_time[i];
while (endnum < intervals.size() && end_time[endnum] < time + 1) {//處理當前時間前已結束的會議
endnum++;
free_room++;
}
if (free_room > 0)//有空餘會議室,借下1個空餘會議室
free_room--;
else//無空餘會議室,需新會議室
room++;
}
return room;
}
};
(3)結果
執行用時 :20 ms, 在所有 C++ 提交中擊敗了 91.94% 的使用者;
記憶體消耗 :12 MB, 在所有 C++ 提交中擊敗了 100.00% 的使用者。
三、其他
暫無。
相關文章
- LeetCode 253. Meeting Rooms II(會議室)LeetCodeOOM
- [Leetcode]253. Meeting Rooms IILeetCodeOOM
- 253. Meeting Rooms IIOOM
- 【LeetCode】253. Meeting Rooms II 解題報告(C++)LeetCodeOOMC++
- [Leetcode] 253. Meeting Rooms II 解題報告LeetCodeOOM
- Meeting Rooms IIOOM
- LeetCode-Meeting Rooms IILeetCodeOOM
- [LeetCode 253] Meeting Rooms IILeetCodeOOM
- *LeetCode-Meeting Rooms IILeetCodeOOM
- [LeetCode] Meeting Rooms 會議室LeetCodeOOM
- [LeetCode253]Meeting Rooms IILeetCodeOOM
- LeetCode 252. Meeting Rooms(會議室)LeetCodeOOM
- Leetcode 252. Meeting Room 253. Meeting Room IILeetCodeOOM
- Leetcode 253:Meeting Rooms II(超詳細的解法!!!)LeetCodeOOM
- leetcode253——會議室 II——java實現LeetCodeJava
- Leetcode: Meeting RoomsLeetCodeOOM
- LeetCode #252 - Meeting RoomsLeetCodeOOM
- Leetcode 252 Meeting RoomsLeetCodeOOM
- [LeetCode 252] Meeting RoomsLeetCodeOOM
- LeetCode252 Meeting RoomsLeetCodeOOM
- leetcode-252-Meeting RoomsLeetCodeOOM
- [LintCode/LeetCode] Meeting RoomsLeetCodeOOM
- LeetCode 題解(254) : Meeting RoomsLeetCodeOOM
- Leetcode 252. Meeting Rooms (Easy) (cpp)LeetCodeOOM
- LeetCode 252. Meeting Rooms (Java版; Easy)LeetCodeOOMJava
- 252. Meeting RoomsOOM
- [leetcode] 252. Meeting Rooms 解題報告LeetCodeOOM
- [LeetCode] 252、會議室LeetCode
- [LeetCode] Jump Game IILeetCodeGAM
- Leetcode jump Game IILeetCodeGAM
- Leetcode Spiral Matrix IILeetCode
- Leetcode Path Sum IILeetCode
- Leetcode-Subsets IILeetCode
- Leetcode-Permutations IILeetCode
- Leetcode Unique Paths IILeetCode
- Permutations II leetcode javaLeetCodeJava
- Subset II leetcode javaLeetCodeJava
- LeetCode 59. 螺旋矩陣 II(python、c++)LeetCode矩陣PythonC++