mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
0827:最大人工岛----添加js解法
This commit is contained in:
@ -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">
|
||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||
|
Reference in New Issue
Block a user