给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。
找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。
你可以以任意顺序返回这些节点编号。
由分析可知:如果有一条边a->b,那b肯定不在最小的点集中,因为b能到达的a也能到达,且还比b多了a这个可达的点,所以:
只有入度为0的结点,才可以在最小的点集中,且最小的点集中必须包含所有入度为0的点
所以:统计所有入度为0的结点即可
1 class Solution { 2 public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) { 3 int []in=new int[n]; 4 for(var e:edges){ 5 in[e.get(1)]++;//统计入度 6 } 7 LinkedList<Integer> list=new LinkedList<>(); 8 for(int i=0;i<n;i++){ 9 if(in[i]==0) 10 list.add(i);//找出入度为0的点 11 } 12 return list; 13 } 14 }