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 ≥ queryoffline 算法:
- 將
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!
評論