399. Evaluate Division
題目網址:https://leetcode.cn/problems/evaluate-division/
題意:給一變數 pair array
equations
, 和一實數 arrayvalues
, 其中equations[i] = [Ai, Bi]
和values[i]
共同表示Ai / Bi = values[i]
。每個Ai
或Bi
是一個表示單個變數的 string。另外, 有一些以 array
queries
表示的問題, 其中queries[j] = [Cj, Dj]
表示第j
個問題, 請根據已知條件找出Cj / Dj = ?
的結果作為答案。返回所有問題的答案。若存在某個無法確定的答案, 則用
-1.0
替代這個答案。若問題中出現已知條件中沒有出現的 string, 也用-1.0
替代這個答案。注意:輸入皆為有效的, 除法運算中不會出現除數為
0
的情況, 且不存在任何矛盾的結果。
Solution:
想法:利用 Graph + DFS, 先建立有向圖, 若
query = [a, b]
, 且a -> b
沒有直接連接, 則用 DFS 去尋找是否存在中繼點c
, 使得a -> c -> b
每個 query 都要用
visited
紀錄哪些點已經拜訪過, 否則可能會陷入死循環。
e.g.a -> c -> a -> c ...
typedef pair<string, double> psd; |
- time:$O(e + q \cdot e)$ ➔
e
為equations
的長度,q
為queries
的長度- $O(e)$:建立有向圖
- $O(q \cdot e)$:遍歷
queries
, 而每個 query 的遞迴深度不超過e
- space:$O(e)$ ➔ 遞迴深度、
equations
的長度不超過e
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論