LeetCode in Kotlin

2360. Longest Cycle in a Graph

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.

Example 1:

Input: edges = [3,3,4,2,3]

Output: 3

Explanation: The longest cycle in the graph is the cycle: 2 -> 4 -> 3 -> 2.

The length of this cycle is 3, so 3 is returned.

Example 2:

Input: edges = [2,-1,3,1]

Output: -1

Explanation: There are no cycles in this graph.

Constraints:

Solution

class Solution {
    fun longestCycle(edges: IntArray): Int {
        val n = edges.size
        val vis = BooleanArray(n)
        val dfsvis = BooleanArray(n)
        val path = IntArray(n)
        var maxLength = -1
        for (i in 0 until n) {
            if (!vis[i]) {
                path[i] = 1
                maxLength = Math.max(maxLength, dfs(i, 1, path, vis, dfsvis, edges))
            }
        }
        return maxLength
    }

    private fun dfs(
        node: Int,
        pathLength: Int,
        path: IntArray,
        vis: BooleanArray,
        dfsvis: BooleanArray,
        edges: IntArray,
    ): Int {
        vis[node] = true
        dfsvis[node] = true
        var length = -1
        if (edges[node] != -1 && !vis[edges[node]]) {
            path[edges[node]] = pathLength + 1
            length = dfs(edges[node], pathLength + 1, path, vis, dfsvis, edges)
        } else if (edges[node] != -1 && dfsvis[edges[node]]) {
            length = pathLength - path[edges[node]] + 1
        }
        dfsvis[node] = false
        return length
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy