• 代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量


    代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量

    一、695. 岛屿的最大面积

    题目链接:https://leetcode.cn/problems/max-area-of-island/
    思路:典型的遍历模板题,我采用深度优先,每块岛屿递归遍历的时候计数,递归完比较大小记录最大值。

    class Solution {
       int max = 0, k = 0;
        public int maxAreaOfIsland(int[][] grid) {
            for (int i = 0; i < grid.length; i++) {
                for (int j = 0; j < grid[0].length; j++) {
                    if (grid[i][j] == 1) {
                        dfs(grid, i, j);
                        max = Math.max(max, k);
                        k = 0;
                    }
                }
            }
            return max;
        }
    
        void dfs(int[][] grid, int x, int y) {
            if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] != 1) {
                return;
            }
            k++;
            grid[x][y] = 0;
            dfs(grid, x, y-1);
            dfs(grid, x, y+1);
            dfs(grid, x-1, y);
            dfs(grid, x+1, y);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    二、1020. 飞地的数量

    题目链接:https://leetcode.cn/problems/number-of-enclaves/description/
    思路:求飞地的数量其实就是求不与边框相接的地块数量,那么可以留一个标识位flag,递归中发现不是飞地标记一下,该次递归记得数就不累加了。

    class Solution {
         // true表示没有接触边界
        boolean flag = true;
        int num = 0;
        public int numEnclaves(int[][] grid) {
            int sum = 0;
            for (int i = 0; i < grid.length; i++) {
                for (int j = 0; j < grid[0].length; j++) {
                    if (grid[i][j] == 1) {
                        dfs(grid, i, j);
                        if (flag) {
                            sum += num;
                        }else {
                            flag = true;
                        }
                        num = 0;
                    }
                }
            }
            return sum;
        }
    
        void dfs(int[][] grid, int x, int y) {
            if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] != 1) {
                return;
            }
            if (x == 0 || y == 0 || x == grid.length-1 || y == grid[0].length-1) {
                flag = false;
            }
            num++;
            grid[x][y] = 0;
            dfs(grid, x, y-1);
            dfs(grid, x, y+1);
            dfs(grid, x-1, y);
            dfs(grid, x+1, y);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    【已解决】AttributeError: module ‘torch.jit‘ has no attribute ‘_script_if_tracing‘
    android studio设置flutter和dart的sdk配置
    C#WPF标记扩展应用实例
    三月以来5起事故,有限空间作业如何管控?
    MySQL 安装与调试
    【css案例】
    PDE的数值解法(有限元,有限差分法)综合介绍
    11个精美网页——Web前端开发技术课程大作业,期末考试,Dreamweaver简单网页制作
    文件传输、文件挂载MOUNT:NFS、CIFS、ADB、SAMBA
    gdb core调试实践
  • 原文地址:https://blog.csdn.net/qq_43511039/article/details/134027571