Skip to content

Commit f73669b

Browse files
authored
Update 2876-count-visited-nodes-in-a-directed-graph.js
1 parent b93298a commit f73669b

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

2876-count-visited-nodes-in-a-directed-graph.js

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,30 @@
22
* @param {number[]} edges
33
* @return {number[]}
44
*/
5-
var countVisitedNodes = function(edges) {
6-
let n = edges.length, res = new Array(n).fill(0), j = 0;
7-
for (let i = 0; i < n; i++) {
8-
let j = i
9-
let seen = new Set();
10-
let s = [];
11-
while (!seen.has(j) && res[j] == 0) {
12-
seen.add(j);
13-
s.push(j);
14-
j = edges[j];
15-
}
16-
if (seen.has(j)) { // hit the cycle
17-
let k = s.length - s.indexOf(j);
18-
for (j = 0; j < k; ++j) {
19-
res[s.pop()] = k;
20-
}
21-
}
22-
while (s.length) {
23-
j = s.pop();
24-
res[j] = res[edges[j]] + 1;
25-
}
5+
const countVisitedNodes = function(edges) {
6+
const n = edges.length, res = Array(n).fill(0)
7+
for(let i = 0; i < n; i++) {
8+
const visited = new Set()
9+
let j = i, q = []
10+
while(res[j] === 0 && !visited.has(j)) {
11+
q.push(j)
12+
visited.add(j)
13+
j = edges[j]
2614
}
27-
return res;
15+
16+
if(visited.has(j)) {
17+
const k = q.length - q.indexOf(j)
18+
for(let ii = 0; ii < k; ii++) {
19+
res[q.pop()] = k
20+
}
21+
}
22+
23+
while(q.length) {
24+
const ii = q.pop()
25+
res[ii] = res[edges[ii]] + 1
26+
}
27+
28+
}
29+
30+
return res
2831
};

0 commit comments

Comments
 (0)