Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Minimum Number of Vertices to Reach All Nodes

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "1557" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Given a directed acyclic graph, with n vertices numbered from 0 to n-1, and an array edges where edges[i] = [fromi, toi] represents a directed edge from node fromi to node toi. Find the smallest set of vertices from which all nodes in the graph are reachable. It's guaranteed that a unique solution exists. Notice that you can return the vertices in any order. Example 1: Input: n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] Output: [0,3] Explanation: It's not possible to reach all the nodes from a single vertex. From 0 we can reach [0,1,2,5]. From 3 we can reach [3,4,2,5]. So we output [0,3]. Example 2: Input: n = 5, edges = [[0,1],[2,1],[3,1],[1,4],[2,4]] Output: [0,2,3] Explanation: Notice that vertices 0, 3 and 2 are not reachable from any other node, so we must include them. Also any of these vertices can reach nodes 1 and 4. Constraints: 2 <= n <= 10^5 1 <= edges.length <= min(10^5, n * (n - 1) / 2) edges[i].length == 2 0 <= fromi, toi < n All pairs (fromi, toi) are distinct.

Explanation

Here's the solution to find the smallest set of vertices from which all nodes in a directed acyclic graph are reachable:

  • High-Level Approach:

    • Identify nodes with no incoming edges. These nodes are inherently unreachable from any other node in the graph and must be included in the result.
    • Iterate through the edges and mark the 'to' nodes as reachable since they have incoming edges.
    • The nodes that were not marked as reachable are the ones with no incoming edges and form the required set.
  • Complexity:

    • Runtime Complexity: O(n + m), where n is the number of vertices and m is the number of edges.
    • Storage Complexity: O(n), where n is the number of vertices.

Code

    def findSmallestSetOfVertices(n: int, edges: list[list[int]]) -> list[int]:
    """
    Finds the smallest set of vertices from which all nodes in a DAG are reachable.

    Args:
        n: The number of vertices in the graph.
        edges: A list of edges, where edges[i] = [fromi, toi].

    Returns:
        A list of vertices representing the smallest set.
    """

    reachable = [False] * n
    for edge in edges:
        reachable[edge[1]] = True

    result = []
    for i in range(n):
        if not reachable[i]:
            result.append(i)

    return result

More from this blog

C

Chatmagic blog

2894 posts