题目链接 思路 这个题是要找处于环的边,可以转化为用并查集处理的问题首先把所有结点初始化,每个人的根节点都是自己每遍历一个边就合并两个子集如果遍历到某一个边,发现合并前二者就是一个子集(也就是union函数返回false),那么这个边就是最后一个环的边,也就是我们要找的多余的边 class Solution { public int[] findRedundantConnection(int[][] edges) { int n = edges.length; int[] fathers = new int[n+1]; for(int i = 1 ; i < fathers.length ; i++) fathers[i] = i; for(int[] edge : edges){ if(!union(fathers,edge[0],edge[1])) return edge; } return new int[0]; } private int findFather(int[] fathers , int index){ if(fathers[index] != index) fathers[index] = findFather(fathers,fathers[index]); return fathers[index]; } private boolean union(int[] fathers , int i , int j){ int fatherOfI = findFather(fathers,i) , fatherOfJ = findFather(fathers,j); if(fatherOfI == fatherOfJ) return false; fathers[fatherOfI] = fatherOfJ; return true; } }