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++代码
|
|