并查集
var len = arr.length;获取长度var parent = new Array(len + 1).fill(0).map((v, i) => i)生成数组,长度为n+1且每一项的值等于下标for (var i = 0; i < len; i++) {遍历数组if (pi !== pj) {找到节点res[1]在parent中的位置,找到节点res[1]在parent中的位置,如果不是同一个,则执行连接parent[pi] = pj把node2的位置 连接 到node1的位置上来,等下次访问到了node1时,其实就是访问到node2return res;如果找到了相等的了,就返回出来
var findRedundantConnection = function (arr) {
var len = arr.length;
var parent = new Array(len + 1).fill(0).map((v, i) => i)
for (var i = 0; i < len; i++) {
var res = arr[i]
var pi = find(parent, res[0])
var pj = find(parent, res[1])
if (pi !== pj) {
parent[pi] = pj
} else {
return res
}
}
function find(parent, i) {
var value = parent[i]
if (value !== i) { //如果不相等,说明value是i的爸爸
parent[i] = find(parent, value)//进一步找寻value的爸爸
}
return parent[i]
}
};
测试代码
var edges = [[1,2],[2,3],[3,4],[1,4],[1,5]]
console.log(findRedundantConnection(edges));