第10天--算法(省份数量(并查集),岛屿数量)

省份数量

class Solution {

    public int findCircleNum(int[][] isConnected) {

        int N = isConnected.length;

        Unionfind unionfind = new Unionfind(N);

        for(int i = 0;i < N;i ++) {

            for(int j = i + 1;j < N;j ++) {

                if(isConnected[i][j] == 1) {

                    unionfind.union(i,j);

                }

            }

        }

        return unionfind.sets;

    }

}

class Unionfind {

    int parent[];

    int size[];

    int help[];

    int sets;

    public Unionfind(int N) {

        parent = new int[N];

        size = new int[N];

        help = new int[N];

        sets = N;

        for(int i = 0;i < N;i ++) {

            parent[i] = i;

            size[i] = 1;

        }

    }

    public int find(int i) {

        int j = 0;

        while(i != parent[i]) {

            help[j ++] = i;

            i = parent[i];

        }

        j --;

        for(;j >=0;j --) {

            parent[help[j]] = i;

        }

        return i;

    }

    public void union(int i,int j) {

        int x = find(i);

        int y = find(j);

        if(x != y) {

            if(size[x] >= size[y]) {

                size[x] += size[y];

                parent[y] = x;

            }else {

                size[y] += size[x];

                parent[x] = y;

            }

            sets --;

        }

    }

}

 

岛屿数量

class Solution {

    public int numIslands(char[][] grid) {

        if(grid == null) {

            return 0;

        }

        int res = 0;

        for(int i = 0;i < grid.length;i ++) {

            for(int j = 0;j < grid[0].length;j ++) {

                if(grid[i][j] == '1') {

                    process(grid,i,j);

                    res ++;

                }

            }

        }

        return res;

    }

    public void process(char[][] grid,int x,int y) {

        if(x < 0 || y < 0 || x == grid.length || y == grid[0].length || grid[x][y] != '1') {

            return;

        }

        grid[x][y] = '2';

        process(grid,x + 1,y);

        process(grid,x - 1,y);

        process(grid,x,y + 1);

        process(grid,x,y - 1);

    }

}

posted @ 2021-11-09 16:58  现在开始努力  阅读(73)  评论(0)    收藏  举报