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

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

一、695. 岛屿的最大面积

题目链接:https://leetcode.cn/problems/max-area-of-island/

思路:典型的遍历模板题,我采用深度优先,每块岛屿递归遍历的时候计数,递归完比较大小记录最大值。

java 复制代码
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);
    }
}

二、1020. 飞地的数量

题目链接:https://leetcode.cn/problems/number-of-enclaves/description/

思路:求飞地的数量其实就是求不与边框相接的地块数量,那么可以留一个标识位flag,递归中发现不是飞地标记一下,该次递归记得数就不累加了。

java 复制代码
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);
    }
}
相关推荐
卷福同学31 分钟前
【AI编程】AI+高德MCP不到10分钟搞定上海三日游
人工智能·算法·程序员
mit6.82432 分钟前
[Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
算法
皮卡蛋炒饭.1 小时前
数据结构—排序
数据结构·算法·排序算法
全栈凯哥1 小时前
16.Spring Boot 国际化完全指南
java·spring boot·后端
M1A11 小时前
Java集合框架深度解析:LinkedList vs ArrayList 的对决
java·后端
Top`1 小时前
Java 泛型 (Generics)
java·开发语言·windows
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
如何使用Java WebSocket API实现客户端和服务器端的通信?
java·开发语言·websocket
??tobenewyorker2 小时前
力扣打卡第23天 二叉搜索树中的众数
数据结构·算法·leetcode
是小崔啊2 小时前
tomcat源码02 - 理解Tomcat架构设计
java·tomcat
贝塔西塔2 小时前
一文读懂动态规划:多种经典问题和思路
算法·leetcode·动态规划