-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy path2360-longest-cycle-in-a-graph.js
More file actions
53 lines (46 loc) · 1.26 KB
/
2360-longest-cycle-in-a-graph.js
File metadata and controls
53 lines (46 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* 2360. Longest Cycle in a Graph
* https://leetcode.com/problems/longest-cycle-in-a-graph/
* Difficulty: Hard
*
* You are given a directed graph of n nodes numbered from 0 to n - 1, where each node has at
* most one outgoing edge.
*
* The graph is represented with a given 0-indexed array edges of size n, indicating that
* there is a directed edge from node i to node edges[i]. If there is no outgoing edge from
* node i, then edges[i] == -1.
*
* Return the length of the longest cycle in the graph. If no cycle exists, return -1.
*
* A cycle is a path that starts and ends at the same node.
*/
/**
* @param {number[]} edges
* @return {number}
*/
var longestCycle = function(edges) {
const n = edges.length;
const visited = new Array(n).fill(false);
let result = -1;
for (let i = 0; i < n; i++) {
if (!visited[i]) {
findCycle(i, 0, []);
}
}
return result;
function findCycle(node, steps, path) {
if (visited[node]) {
const cycleStart = path.indexOf(node);
if (cycleStart !== -1) {
result = Math.max(result, steps - cycleStart);
}
return;
}
visited[node] = true;
path.push(node);
if (edges[node] !== -1) {
findCycle(edges[node], steps + 1, path);
}
path.pop();
}
};