LeetCode 1557. Minimum Number of Vertices to Reach All Nodes
原题链接在这里:https://leetcode.com/problems/minimum-number-of-vertices-to-reach-all-nodes/description/
题目:
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.
题解:
All the nodes with no indegree should be in the final result.
Because node with indegree, they can be reached by some other nodes. And nodes with no indegree can't be reached by any other nodes.
Time Complexity: O(n + e). e = edges.size().
Space: O(n).
AC Java:
1 class Solution { 2 public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) { 3 List<Integer> res = new ArrayList<>(); 4 int [] inDegree = new int[n]; 5 for(List<Integer> e : edges){ 6 inDegree[e.get(1)]++; 7 } 8 9 for(int i = 0; i < n; i++){ 10 if(inDegree[i] == 0){ 11 res.add(i); 12 } 13 } 14 15 return res; 16 } 17 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步