我的js算法爬坑之旅-连接所有点的最小费用

152 阅读1分钟

第一百零三天:力扣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%的用户