前往
大廳
主題

LeetCode - 684. Redundant Connection 解題心得

Not In My Back Yard | 2021-08-19 00:00:03 | 巴幣 0 | 人氣 306

題目連結:


題目意譯:
在這個問題中,一棵樹為一個無向圖,其為無環的連通圖。

你被給定一個圖,其一開始為一棵樹有著 n 個節點編號為 1 到 n,之後便加上了一條額外的邊。新加的邊為從 1 到 n 選出兩個相異數字作為其頂點,且不會是已經存在的邊。圖以一個長度為 n 的陣列 edges 表示,其中 edges[i] = [ai, bi] 代表著圖中的節點 ai 與節點 bi 之間有著一條邊。

回傳可被移除的一條邊使得結果的圖為一個有著 n 個節點的樹。如果有多個答案,則回傳輸入最後出現的那一個。

限制:
n == edges.length
3 ≦ n ≦ 1000
edges[i].length == 2
1 ≦ ai < bi ≦ edges.length
ai ≠ bi
沒有重複的邊。
給定的圖為連通圖。



範例測資:
範例 1:
輸入: edges = [[1,2],[1,3],[2,3]]
輸出: [2,3]

範例 2:
輸入: edges = [[1,2],[2,3],[3,4],[1,4],[1,5]]
輸出: [1,4]


解題思維:
找出答案的過程有點像是找一個圖的最小生成樹(Minimum Spanning Tree,如這題),同樣也是利用併查集(Union-Find Set)來檢查一條邊的兩個頂點是否已經連通。如果是就加入這條邊;反之則為答案。而因為我們是按照輸入順序去檢查,所以當可行解出現時一定是所有可能中最後出現的。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作