Evaluate Division LeetCode solution in Java

1
class Solution {
2
public double[] calcEquation(
3
List<List<String>> equations, double[] values, List<List<String>> queries) {
4
int len = equations.size();
5
Map<String, Integer> varMap = new HashMap<>();
6
int varCnt = 0;
7
for (int i = 0; i < len; i++) {
8
if (!varMap.containsKey(equations.get(i).get(0))) {
9
varMap.put(equations.get(i).get(0), varCnt++);
10
}
11
if (!varMap.containsKey(equations.get(i).get(1))) {
12
varMap.put(equations.get(i).get(1), varCnt++);
13
}
14
}
15

16
List<Pair>[] edges = new List[varCnt];
17
for (int i = 0; i < varCnt; i++) {
18
edges[i] = new ArrayList<>();
19
}
20

21
for (int i = 0; i < len; i++) {
22
int va = varMap.get(equations.get(i).get(0));
23
int vb = varMap.get(equations.get(i).get(1));
24
edges[va].add(new Pair(vb, values[i]));
25
edges[vb].add(new Pair(va, 1.0 / values[i]));
26
}
27

28
int queriesCnt = queries.size();
29
double[] ans = new double[queriesCnt];
30
for (int i = 0; i < queriesCnt; i++) {
31
List<String> query = queries.get(i);
32
double result = -1.0;
33
if (varMap.containsKey(query.get(0)) && varMap.containsKey(query.get(1))) {
34
int idxA = varMap.get(query.get(0));
35
int idxB = varMap.get(query.get(1));
36
if (idxA == idxB) {
37
result = 1.0;
38
} else {
39
Queue<Integer> points = new LinkedList<>();
40
points.offer(idxA);
41
double[] ratios = new double[varCnt];
42
Arrays.fill(ratios, -1.0);
43
ratios[idxA] = 1.0;
44
while (!points.isEmpty() && ratios[idxB] < 0) {
45
int cur = points.poll();
46
for (Pair pair : edges[cur]) {
47
int y = pair.index;
48
double value = pair.value;
49
if (ratios[y] < 0) {
50
ratios[y] = ratios[cur] * value;
51
points.offer(y);
52
}
53
}
54
}
55

56
result = ratios[idxB];
57
}
58
}
59

60
ans[i] = result;
61
}
62

63
return ans;
64
}
65

66
class Pair {
67
int index;
68
double value;
69

70
public Pair(int index, double value) {
71
this.index = index;
72
this.value = value;
73
}
74
}
75
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0