1
var validArrangement = function (pairs) {
2
let graph = {};
3
let degrees = {}; // outdegree: positive, indegree: negative
4
for (var [x, y] of pairs) {
5
if (!graph[x]) graph[x] = [];
6
graph[x].push(y);
7
if (degrees[x] === undefined) degrees[x] = 0;
8
if (degrees[y] === undefined) degrees[y] = 0;
9
degrees[x]++;
10
degrees[y]--;
11
}
12
let start = pairs[0][0];
13
for (var [x] of pairs) {
14
if (degrees[x] === 1) start = x; // one extra outdegree
15
}
16
let ans = [];
17
dfs(start);
18

19
function dfs(node) {
20
while ((graph[node] || []).length) {
21
let neighbor = graph[node].pop();
22
dfs(neighbor);
23
ans.push([node, neighbor]);
24
}
25
}
26
return ans.reverse();
27
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0