1851. Minimum Interval to Include Each Query
題目網址:https://leetcode.cn/problems/minimum-interval-to-include-each-query/
題意:給一個二維整數 array
intervals
, 其中intervals[i] = [left_i, right_i]
表示第i
個區間開始於left_i
、結束於right_i
。定義
intervals[i]
的長度為right_i - left_i + 1
。再給一整數 array
queries
, 第j
個查詢的答案是滿足left_i ≤ queries[j] ≤ right_i
的最小區間i
之長度。若不存在這樣的區間, 則答案為-1
。以 array 的形式返回對應查詢的所有答案。
Solution:
想法:利用 offline 算法 + Min Heap + Greedy, 先將所有滿足
interval.left ≤ query
的區間加到pq
中, 再判斷pq
中的這些 interval 是否滿足interval.right ≥ query
offline 算法:
- 將
queries
由小到大排序, 並記錄每個query
原先的 index- 將
intervals
根據left
由小到大排序遍歷每個 query:
- Min Heap
pq
儲存滿足interval.left ≤ query
的區間之長度duration
和right
- 對於每個
query
:
- 先將符合
interval.left ≤ query
的所有區間加入到 min heappq
中, 其中pq
是根據區間長度duration
由小到大排序- 不斷檢查
pq.top().right
是否≥ query
。若滿足pq.top() ≥ query
, 則該區間即為符合條件的最小區間
class Solution { |
- time:$O(m \cdot log(m) + n \cdot log(n))$ ➔
m
為 interval 的個數、n
為 query 的個數- $O(m \cdot log(m))$
- 排序
intervals
- 每個
intervals[i]
最多被加入到pq
一次, 而pq
每 insert / delete 一個元素皆需 $O(log(m))$
- 排序
- $O(n \cdot log(n))$:排序
querySet
- $O(m \cdot log(m))$
- space:$O(m + n)$
- $O(m)$:
pq
中的元素個數不超過 $m$ 個,m
為intervals
的個數 - $O(n)$:
querySet
- $O(m)$:
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論