LeetCode 684 冗餘連線
阿新 • • 發佈:2020-08-27
LeetCode 684 冗餘連線
題目描述:
在本問題中, 樹指的是一個連通且無環的無向圖。
輸入一個圖,該圖由一個有著N
個節點 (節點值不重複1, 2, ..., N
) 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1
到N
中間,這條附加的邊不屬於樹中已存在的邊。
結果圖是一個以邊組成的二維陣列。每一個邊的元素是一對[u, v]
,滿足 u < v
,表示連線頂點u
和v
的無向圖的邊。
返回一條可以刪去的邊,使得結果圖是一個有著N
個節點的樹。如果有多個答案,則返回二維陣列中最後出現的邊。答案邊 [u, v]
應滿足相同的格式 u < v
。
並查集
按照edges中的順序對邊進行遍歷並建立並查集,返回第一次出現環的邊(唯一)
執行用時:1 ms, 在所有 Java 提交中擊敗了97.15%的使用者
記憶體消耗:40 MB, 在所有 Java 提交中擊敗了68.88%的使用者
class Solution { public int[] findRedundantConnection(int[][] edges) { //按edges中的順序建立連通圖,返回第一次出現環時的邊 int[] result = null; int[] nodes = new int[edges.length+1]; Arrays.fill(nodes, -1); for(int[] edge: edges) { if(!union(edge[0], edge[1], nodes)) { result = edge; } } return result; } public int findRoot(int x, int[] nodes) { while(nodes[x]!=-1) { x = nodes[x]; } return x; } public boolean union(int x, int y, int[] nodes) { int rootX = findRoot(x, nodes); int rootY = findRoot(y, nodes); if(rootX==rootY) { return false; } nodes[rootX] = rootY; return true; } }