给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-area-of-island
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.LinkedList;
class Solution {
private int[] dx = {0, 1, 0, -1};
private int[] dy = {1, 0, -1, 0};
public int maxAreaOfIsland(int[][] grid) {
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;
}
int ret = 0;
for (int i = 0; i < grid.length; ++i) {
for (int j = 0; j < grid[i].length; ++j) {
if (grid[i][j] == 1) {
int count = 0;
LinkedList<int[]> queue = new LinkedList<>();
grid[i][j] = 0;
queue.offer(new int[]{i, j});
while (!queue.isEmpty()) {
int[] point = queue.poll();
count++;
for (int k = 0; k < 4; ++k) {
int x = dx[k] + point[0];
int y = dy[k] + point[1];
if (x >= 0 && x < grid.length && y >= 0 && y < grid[0].length && grid[x][y] == 1) {
grid[x][y] = 0;
queue.offer(new int[]{x, y});
}
}
}
ret = Math.max(ret, count);
}
}
}
return ret;
}
}