js算法——标记法求最大岛屿面积
2021/8/18 22:36:03
本文主要是介绍js算法——标记法求最大岛屿面积,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)
示例 1:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]
算法如下:
// 找出最大的岛屿 function findMaxIslandArea(arr) { let maxArea = 0; for (let i = 0; i < arr.length; i++) { let row = arr[i]; for (let j = 0; j < row.length; j++) { let el = row[j]; if (el === 1) { let num = computeIslandArea(i, j, arr); console.log(`岛屿[${i},${j}],面积为${num}`); if (num > maxArea) { maxArea = num; } } } } return maxArea; } // 计算岛屿大小 x是行 y是列 function computeIslandArea(x, y, grid, count = 0) { if (x < 0 || y < 0) return 0; if (grid[x] && (grid[x][y] == 1)) { // 已计算过的标记为0 grid[x][y] = 0; count++; // 计算左边 count += computeIslandArea(x, y - 1, grid); // 计算右边 count += computeIslandArea(x, y + 1, grid); // 计算上面 count += computeIslandArea(x - 1, y, grid); // 计算下面 count += computeIslandArea(x + 1, y, grid); } return count; } let grids = [ [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0], [0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0] ]; console.log(`最大岛屿面积为:${findMaxIslandArea(grids)}`);
这篇关于js算法——标记法求最大岛屿面积的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略