[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,连个图都没:

number-of-islands

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

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

number-of-islands mark

使用 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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值