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!
評論
