LeetCode 解題紀錄 1557. Minimum Number of Vertices to Reach All Nodes

Kevin Chung
Oct 14, 2022

--

題目

在一個有向無迴圈的圖中,找出端點的最小集合,只要透從這些端點開始走一遍就能到達所有的端點(開始的端點也算在內)

限制條件

  • 端點數目從 0 到 n-1
  • 路徑不會重複,數目為 1 ~ 100000

觀察

  • 如果有個端點只有往外連接,沒有進入的連接,那它一定是這個集合的一部份,因為它如果不當成一個起點,那就沒有連接到它的路徑了
  • 如果有個端點有進入的連接,那它一定不是集合的一部分,因為我只要選它的上個端點即可

思路

  • 使用一個長度為 n 的矩陣來紀錄進入連接
  • 透過檢查每個路徑的終點端點,在陣列上幫它加 1 就是進入連接的數目了
  • 拜訪過所有的路徑後,將進入連接為 0 的端點加入集合

Trial 1

結果

時間與空間複雜度皆為 O(n) ,結果沒有很好,去看看別人怎麼寫的,觀念是一樣的但發現有點可以改進的小地方

Trail 2

  • 我們並不需要知道準確的 in degree 是多少,只要知道為 0 的即可,所以不要做 + 1的運算,直接設成 1 即可

結果

時間與空間複雜度還是 O(n),但執行時間減少不少,用最精簡的動作達成需求是最佳化的必經過程

--

--

No responses yet