首页 > 其他分享 >岛屿的最大面积

岛屿的最大面积

时间:2022-10-02 22:25:35浏览次数:69  
标签:const 最大 ++ max 面积 岛屿 let && grid

目录

题目描述

  1. 题目地址:https://leetcode.cn/problems/max-area-of-island/
  2. 题目要求
    给你一个大小为 m x n 的二进制矩阵 grid 。

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

image

解题思路

  1. 从某一块陆地出发,向四个方向递归DFS
  2. 每次递归前要对下标进行判断,以区域的边界作为递归边界
  3. 为保证每块陆地只访问一次,将已经访问过的陆地置0
  4. 递归地返回整块岛屿的面积
  5. fill()方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素

解题代码

var maxAreaOfIsland = function(grid) {
    const gLen = grid.length
     const hLen = grid[0].length
    if (!grid.length) {
        return 0
    }
    // 存储当前所选元素在平面内上下左右四个方向元素
    const d = [[-1, 0], [0, 1], [1, 0], [0, -1]]
    // 维护递归过程中,平面中元素的使用状态,每个只能使用一次
    const used = []
    // 保存岛屿最大面积
    let max = 0
    let count = 0
    // 判断所选元素是否在二维平面内
    const inArea = function (x, y) {
        return x >=0 && x < grid.length && y >=0 && y < grid[0].length
    }
    // 递归函数,深度优先遍历,从grid[i][j]开始移动,将所有链接的陆地标记为访问过
    const dfs = function (grid, i, j) {
        used[i][j] = true
        count ++
        for (let k = 0; k < 4; k++) {
            const newX = i + d[k][0]
            const newY = j + d[k][1]
            if (inArea(newX, newY) && !used[newX][newY] && grid[newX][newY] == 1) {
                dfs(grid, newX, newY)
            }
        }
    }
    for (let i = 0; i < gLen; i++) {
        used.push(new Array(hLen).fill(false))
    }
    for (let i = 0; i < gLen; i++) {
        for (let j = 0; j < hLen; j++) {
            if (!used[i][j] && grid[i][j] == 1) {
                dfs(grid, i, j)
                max = Math.max(max, count)
                count = 0
            }
        }
    }
    return max
};

标签:const,最大,++,max,面积,岛屿,let,&&,grid
From: https://www.cnblogs.com/xiayuxue/p/16735698.html

相关文章

  • F. Almost Permutation -最小费用最大流
    F.AlmostPermutationhttps://codeforces.ml/problemset/problem/863/F题意有一个长度为n的数组,其中的每个数都在1~n范围内,给q个限制(\(1<=n<=50,0<=q<=100\))限制有两......
  • 认识最大熵模型
    信息熵设\(X\)是取有限个值的随机变量,\(X\in\{x_1,x_2,\cdots,x_n\},\i=1,2,\cdots,n\),则随机变量\(X\)的熵定义为:\[H(X)=-\sum_{i=1}^nP(X=x_i)\log_aP(X=x_i)\]\(H......
  • 最大团
    限制时间限制1s,空间限制512M题目描述CuberQQ有一个无向图$G=(V,E)$,其中$V=\{1,2,\cdots,n\}$。对于$V$中的任意一个点$v$,有两个相关的点权$f_x(v),f_y(v)$......
  • 派对最大快乐值问题
    派对最大快乐值问题作者:Grey原文地址:博客园:派对最大快乐值问题CSDN:派对最大快乐值问题题目描述员工信息的定义如下:publicstaticclassEmployee{pu......
  • 【C语言】给定两个数,求这两个数的最大公约数
    ​​intmain()​​​​{​​​​​intnum1=0;​​​​ intnum2=0;​​​​ inta=0;​​​​ scanf("%d%d",&num1,&num2);​​​​ while(a=num1%num2......
  • 中国制造业最大危机,不是美国科技封锁,而是年轻人没人愿意去工厂!
    现在才发现,中国制造业最大的危机,不是美国科技封锁,而是年轻人已经没人愿意去工厂上班!如今我国制造业基本都是70后、80后在撑着,90后进工厂打工的已经基本看不到了,已经有很多地......
  • 【code基础】判断数组中每个元素前递增序列子序列的最大长度
    这是力扣刷题中很经典的一个套路,类似有:以下标i为标准,其之前最长的非递增序列的个数以下标i为标准,其之后的最长非递减序列的个数//以下标i为标准,其之前最长的非递增......
  • SQLServer的最大连接数
    http://t.zoukankan.com/qanholas-p-2450339.html 我们的程序只能够跟SQLServer建立101个连接 在连接字符串中加入代码:Pooling=true;MaxPoolSize=40000;MinPool......
  • C语言:辗转相除法求最大公约数 函数
    #include<stdio.h>//求最大公约数:辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。//319377:319%377=319377%319=58319%58=2958%29=0......
  • C语言:辗转相除法求最大公约数
    #include<stdio.h>//求最大公约数:辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。//319377:319%377=319377%319=58319%58=2958%29=0......