第一百零三天:力扣1584题,连接所有点的最小费用
地址:leetcode-cn.com/problems/mi…
思路:生成树+并查集
/**
* @param {number[][]} points
* @return {number}
*/
var minCostConnectPoints = function(points) {
let n = points.length;
let edges = [];
let pre = [];
for(let i = 0; i < n; i++){
pre[i] = i;
for(let j = i + 1; j < n; j++){
let dis = Math.abs(points[i][0] - points[j][0]) + Math.abs(points[i][1] - points[j][1]);
edges.push({from:i,to:j,w:dis});
}
}
function union(root){
let tmp ;
let son = root;
let cur = root;
while(cur !== pre[cur]){
cur = pre[cur];
}
while(son !== cur){
tmp = pre[son];
pre[son] = cur;
son = tmp;
}
return cur;
}
edges.sort((a,b)=>{return a.w- b.w});
let m = edges.length;
let ans = 0;
for(let i =0 ; i < m ; i++){
let x = edges[i].from;
let y = edges[i].to;
let w = edges[i].w;
let tx = union(x);
let ty = union(y);
if(tx != ty){
ans += w;
pre[tx] = ty;
}
}
return ans;
};
执行用时:1132 ms, 在所有 JavaScript 提交中击败了60.00%的用户
内存消耗:82.7 MB, 在所有 JavaScript 提交中击败了80.00%的用户