1584. Min Cost to Connect All Points

// Some code
class Solution {
    int cost;
    public int minCostConnectPoints(int[][] points) {
        int num = points.length;
        // number of all edges: num*(num-1)/2
        int[][] edges = new int[num*(num-1)/2][3];
        int index = 0;
        for(int i=0; i<num; i++){
            for(int j=i+1; j<num; j++){
                edges[index][0]=i;
                edges[index][1]=j;
                edges[index][2]=Math.abs(points[i][0]-points[j][0]) + Math.abs(points[i][1]-points[j][1]);
                index++;
            }
        }

        Arrays.sort(edges, (a,b)->a[2]-b[2]);
        
        UnionFind uf = new UnionFind(num);
        for(int[] edge : edges){
            if(!uf.isConnected(edge[0],edge[1])){
                uf.union(edge[0], edge[1]);
                cost+=edge[2];
            }
        }
        return cost;
    }
}

class UnionFind{
    private int[] graph;
    public int count;
    
    public UnionFind(int n){
        graph = new int[n];
        for(int i=0; i<n; i++){
            graph[i]=i;
        }
        count = n;
    }
    
    public void union(int p, int q){
        int rootP = find(p);
        int rootQ = find(q);
        if(rootP!=rootQ){
            graph[rootP]=rootQ;
            count--;
        }
    }
    
    public boolean isConnected(int p, int q){
        int rootP = find(p);
        int rootQ = find(q);
        return rootP == rootQ;
    }
    
    public int find(int p){
        while(graph[p]!=p){
            graph[p] = graph[graph[p]];
            p=graph[p];
        }
        return p;
    }
}

Last updated