LeedCode刷題:1557.可以到達所有點的最少點數
阿新 • • 發佈:2020-08-24
給你一個 有向無環圖, 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(intn, 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 }