399. 除法求值
分析
- 构建图:
- 遍历
equations
和values
,构建邻接表表示的加权有向图graph
- 如果
A / B = v
,则添加边A -> B
和B -> A
- 遍历
- Floyd-Warshall 算法:
- 利用三重循环,尝试通过任意中间节点
k
更新任意两节点i
和j
间的比值 - 如果
i -> k
和k -> j
的路径存在,则更新i -> j
的权重为graph[i][k] * graph[k][j]
- 利用三重循环,尝试通过任意中间节点
- 处理查询:
- 对于每个查询
[C, D]
:- 如果
C
和D
不在图中,或者两者之间无路径,则返回-1.0
- 否则返回图中存储的
C -> D
的权重
- 如果
- 对于每个查询
时间复杂度
- 构建图:遍历
equations
,时间复杂度为O(E)
,其中E
是等式的数量 Floyd-Warshall
算法:三重循环,时间复杂度为O(V^3)
,其中V
是变量的数量- 处理查询:遍历
queries
,时间复杂度为O(Q)
,其中Q
是查询的数量
总体时间复杂度为 O(V^3 + E + Q)
空间复杂度
总的空间复杂度为 O(V^2 + Q)
C++代码
|
|