759. Employee Free Time
題目網址: https://leetcode.cn/problems/employee-free-time/
題意:給一員工的
schedule
列表, 表示每個員工的工作時間。每個員工都有一個非重疊的時段
Intervals
列表, 這些時段皆已由小到大排序。返回這些員工共同、為正數長度的有限時段列表, 需由小到大排序。
注意:類似
[5, 5]
這樣的時段不能成為答案, 因為長度為0
, 而非正數
Solution 1:
想法:先將所有 intervals flatten 成一維, 再將這些 intervals 由小到大進行排序
- 若
intervals[i - 1].end < intervals[i].start
代表兩個區間沒重疊, 須將Interval(intervals[i - 1].end, intervals[i].start)
加入到res
中- 若
intervals[i - 1].end >= intervals[i].start
代表兩個區間有重疊- 須更新
end = max(intervals[i - 1].end, intervals[i].end)
class Solution { |
- time:$O(n \cdot log(n))$ ➔ $O(n) + O(n \cdot log(n)) +O(n)$
n
:所有 interval 的數量- $O(n)$:遍歷所有 interval, 並建立
all
- $O(n \cdot log(n))$:sorting
- $O(n)$:遍歷
all
- space:$O(n)$ ➔
all
Solution 2:
想法:利用 heap, 概念同 Solution 1, 但是可以少遍歷一次所有的 interval
class Solution { |
- time:$O(n \cdot log(n))$ ➔ $O(n)+ O(n \cdot log(n))$
n
:所有 interval 的數量- $O(n)$:遍歷所有 interval, 並建立 min heap, heapify 只需 $O(n)$
- $O(n \cdot log(n))$:從 heap 中每 pop 一個元素需 $O(log(n))$
- space:$O(n)$ ➔ heap 中元素不超過
n
個
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論