0827:最大人工岛----添加js解法

This commit is contained in:
lhp
2024-02-23 10:54:04 +08:00
parent 095242f4b7
commit a45fd00a27

View File

@ -348,6 +348,71 @@ class Solution:
``` ```
### JavaScript
```JavaScript
var largestIsland = function(grid) {
let res = 0;
const m = grid.length;
const n = grid[0].length;
const tag = new Array(n).fill().map(_ => new Array(m).fill(0));
const area = new Map();
const dir = [[0,1],[0,-1],[1,0],[-1,0]];
const dfs = (grid,tag,x,y,mark) => {
let res = 1;
tag[x][y] = mark;
for(let i = 0; i < dir.length; i++) {
let nextX = x + dir[i][0];
let nextY = y + dir[i][1];
if(nextX < 0 || nextX >= m || nextY < 0 || nextY >= n) {
continue;
}
if(grid[nextX][nextY] === 1 && tag[nextX][nextY] === 0) {
res += dfs(grid,tag,nextX,nextY,mark);
}
}
return res;
}
let mark = 2;
//将岛屿用mark标记
for(let i = 0; i < m; i++) {
for(let j = 0; j < n; j++) {
if(grid[i][j] === 1 && tag[i][j] === 0) {
area.set(mark,dfs(grid,tag,i,j,mark));
res = Math.max(res,area.get(mark));
mark++;
}
}
}
//将一个非岛屿格子变为岛屿
for(let i = 0; i < m; i++) {
for(let j = 0; j < n; j++) {
if(grid[i][j] === 0) {
let z = 1;
const connected = new Set();
for(let k = 0; k < dir.length; k++) {
let nextX = i + dir[k][0];
let nextY = j + dir[k][1];
if(nextX < 0 || nextX >= m || nextY < 0 || nextY >= n || tag[nextX][nextY] === 0 || connected.has(tag[nextX][nextY])) {
continue;
}
z += area.get(tag[nextX][nextY]);
connected.add(tag[nextX][nextY]);
}
res = Math.max(res,z);
}
}
}
return res;
};
```
<p align="center"> <p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank"> <a href="https://programmercarl.com/other/kstar.html" target="_blank">
<img src="../pics/网站星球宣传海报.jpg" width="1000"/> <img src="../pics/网站星球宣传海报.jpg" width="1000"/>