[JavaScript 刷题] 搜索 - leetcode 200 & 695

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 搜索 - leetcode 200 & 695相关的知识,希望对你有一定的参考价值。

[javascript 刷题] 搜索 - leetcode 200 & 695

这两道题的解法基本一样,题目也就稍微差了一点点,所以就放在一起解决了。

题目地址:

换言之,岛屿的最大面积 的答案只要加一个 counter 就能解 岛屿数量 这道题。所以这里题目也就用稍微复杂一点的 岛屿的最大面积 了。

题目如下:

You are given an m x n binary matrix grid. An island is a group of 1’s (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

The area of an island is the number of cells with a value 1 in the island.

Return the maximum area of an island in grid. If there is no island, return 0.

解题思路

这道题还挺贴心的,不像 200,连个图都没:

找到图中最大的岛屿,也就是需要碰到岛屿之后,使用 DFS 寻找该岛屿的面积。与之前的一个 BFS 题目不同,这里 DFS 移动方向只有 上 ↑ 下 ↓ 左 ← 右 →,所以途中最大的面积是长得很像 4 的岛屿,面积为 6.

为了防止重复计算岛屿导致死循环,每次查看过岛屿面积后就要将该岛屿标记为访问过的状态,这里可以直接将其改为 0 即可:

使用 JavaScript 解题

只需要在 findIslandArea 主函数中加上一个 counter,在循环体中遍历时 counter++ 就可以解 200 题了。

const directions = [
  [1, 0],
  [-1, 0],
  [0, 1],
  [0, -1],
];

let maxRow, maxCol;

const findIslandArea = (grid, row, col) => 
  if (
    row < 0 ||
    row >= maxRow ||
    col < 0 ||
    col >= maxCol ||
    grid[row][col] === 0
  )
    return 0;

  let area = 1;
  grid[row][col] = 0;

  for (const [rowIncrement, colIncrement] of directions) 
    area += findIslandArea(grid, row + rowIncrement, col + colIncrement);
  

  return area;
;

/**
 * @param number[][] grid
 * @return number
 */
var maxAreaOfIsland = function (grid) 
  if (!grid || grid[0] === undefined) return 0;

  let maxIslandArea = 0;
  maxRow = grid.length;
  maxCol = grid[0].length;

  for (let row = 0; row < maxRow; row++) 
    for (let col = 0; col < maxCol; col++) 
      if (grid[row][col] === 1) 
        const area = findIslandArea(grid, row, col);
        maxIslandArea = Math.max(area, maxIslandArea);
      
    
  

  return maxIslandArea;
;
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于[JavaScript 刷题] 搜索 - leetcode 200 & 695的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] 搜索 - 单词搜索, leetcode 79

[JavaScript 刷题] 二分搜索 - 搜索二维矩阵, leetcode 74

[JavaScript 刷题] 二分搜索 - 搜索二维矩阵, leetcode 74

[JavaScript 刷题] 搜索 - DFS(深度优先搜索)

[JavaScript 刷题] 搜索 - 省份数量, leetcode 547

[JavaScript 刷题] 二分搜索 - 求开方,Leetcode 69