1. 程式人生 > 實用技巧 >LeedCode刷題:1557.可以到達所有點的最少點數

LeedCode刷題:1557.可以到達所有點的最少點數

給你一個 有向無環圖, 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 }