[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(深度优先搜索)