问题陈述:
方程的格式为 A / B = k
,其中 A
和 B
是用字符串表示的变量,k
是一个实数(浮点数)。
给定一些查询问题,返回答案。如果答案不存在,则返回 -1.0。
例如:给定 a / b = 2.0, b / c = 3.0.
查询问题为:a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
,返回 [6.0, 0.5, -1.0, 1.0, -1.0 ]
输入为:
vector<pair<string, string>> equations
vector<double>& values
vector<pair<string, string>> queries
其中equations.size() == values.size()
,并且这些值是正数。
这代表了这些等式。
返回vector<double>
。
根据上面的例子:
equations = [ ["a", "b"], ["b", "c"] ]
values = [2.0, 3.0]
queries = [ ["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"] ]
输入始终有效。您可以假设计算查询将不会出现除以零的情况,并且不存在矛盾。
解决方案 这可以使用在不相交集合上的并+查找进行求解,可以看到以下解决方案:
然而,我不清楚第59行背后的直觉是什么:
rst[i] = uf.rank.get(queries[i][0]) / uf.rank.get(queries[i][1]);
除了第99行:
rank.put(aFather, quotient * rank.get(b) / rank.get(a));
xFather/a
和xFather/b
,其中xFather
是a
和b
的共同父亲。当您需要a/b
比率时,只需执行(xFather/b)/(xFather/a)
(第59行) 即可。 - miradham