253. Meeting Rooms II
題目網址:https://leetcode.cn/problems/meeting-rooms-ii/
題意:給一 array
intervals
, 其中intervals[i] = [start_i, end_i]
, 返回所需的最小會議室數量。注意:
(0, 8)
和(8, 10)
並不衝突
Solution 1:
想法:利用 heap 來紀錄所有會議室的
end
, 並每次取 heap 中最小的, 來確認跟當前 interval 是否有衝突
- 若有, 則將當前
interval.end
加入到 heap 中- 若沒有, 則把
top
取代為當前interval.end
(先pop()
, 再push(newEnd)
)
class Solution { |
- time:$O(n \cdot log(n))$
- $O(n \cdot log(n))$ : sorting
- $O(n \cdot log(n))$ :
n
次從 minHeap 中取top
, 每次取完後會調整 heap, 需 $O(log(n))$
- space:$O(n)$ ➔ heap size 最大為
n
個
Solution 2:
想法:占用資源問題可看做是上下車問題, 則問題可轉化成車上最多有幾人
e.g.
intervals = [[0,30], [5,10], [15,20]]
可想成:
- 第一個人從
0
上車, 從30
下車- 第二個人從
5
上車, 從10
下車- 第三個人從
15
上車, 從20
下車問題可轉化成車上最多有幾人(最多有幾間會議室)
顯然:上車, 車上人數+1;下車, 車上人數-1
先把
intervals
拆解成:
上車 : [0, 1], [5, 1], [15, 1]
下車 : [10, -1], [20, -1], [30, -1]
時間 0 5 10 15 20 30 變化 +1 +1 -1 +1 -1 -1 人數 1 2 1 2 1 0 ➔ 車上最多
2
人
class Solution { |
- time:$O(n \cdot log(n))$ ➔ sorting
- space:$O(n)$ ➔
meetings
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論