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 IILeetCodeOOM
- 253. Meeting Rooms IIOOM
- 【LeetCode】253. Meeting Rooms II 解題報告(C++)LeetCodeOOMC++
- Leetcode 252. Meeting Room 253. Meeting Room IILeetCodeOOM
- Leetcode 253:Meeting Rooms II(超詳細的解法!!!)LeetCodeOOM
- leetcode253——會議室 II——java實現LeetCodeJava
- LeetCode #252 - Meeting RoomsLeetCodeOOM
- [LintCode/LeetCode] Meeting RoomsLeetCodeOOM
- leetcode-252-Meeting RoomsLeetCodeOOM
- LeetCode252 Meeting RoomsLeetCodeOOM
- LeetCode 252. Meeting Rooms (Java版; Easy)LeetCodeOOMJava
- leetcode 掃描線專題 06-leetcode.252 meeting room 力扣.252 會議室LeetCodeOOM力扣
- LeetCode 59. 螺旋矩陣 II(python、c++)LeetCode矩陣PythonC++
- [LeetCode] 252、會議室LeetCode
- leetcode-90. Subsets IILeetCode
- Leetcode 40 Combination Sum IILeetCode
- Leetcode 213 House Robber IILeetCode
- LeetCode 1103[分糖果II]LeetCode
- leetcode【210】【Depth-first Search】Course Schedule II【c++版本】LeetCodeC++
- [LeetCode] 210. Course Schedule IILeetCode
- [LeetCode] 305. Number of Islands IILeetCode
- [LeetCode] 212. Word Search IILeetCode
- [LeetCode] 2105. Watering Plants IILeetCode
- LeetCode 52. N皇后 IILeetCode
- [leetcode]linked-list-cycle-iiLeetCode
- leetcode 219. Contains Duplicate IILeetCodeAI
- [LeetCode] 910. Smallest Range IILeetCode
- [LeetCode] 45. Jump Game IILeetCodeGAM
- LeetCode-047-全排列 IILeetCode
- Leetcode 137. Single Number IILeetCode
- [LeetCode] 3152. Special Array IILeetCode
- 【leetcode】252 會議室(陣列)LeetCode陣列
- LeetCode 252. 會議室(排序)LeetCode排序
- LeetCode-Python-252. 會議室LeetCodePython
- Leetcode 685. Redundant Connection II JavascriptLeetCodeJavaScript
- [LeetCode] 244. Shortest Word Distance IILeetCode
- LeetCode - 113 - 路徑總和 IILeetCode
- leetcode 350. Intersection of Two Arrays IILeetCode