【LeetCode】 695. Max Area of Island 岛屿的最大面积(Medium)(JAVA)
题目地址: https://leetcode.com/problems/max-area-of-island/
题目描述:
Given a non-empty 2D array grid of 0’s and 1’s, 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.
Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)
Example 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]]
Given the above grid, return 6. Note the answer is not 11, because the island must be connected 4-directionally.
Example 2:
[[0,0,0,0,0,0,0,0]]
Given the above grid, return 0.
Note: The length of each dimension in the given grid does not exceed 50.
题目大意
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
解题方法
采用递归方法,遇到 1 时,就看有多少个连续的 1。
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int max = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 0) continue;
int cur = mH(grid, i, j);
if (cur > max) max = cur;
}
}
return max;
}
int[][] ori = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
public int mH(int[][] grid, int row, int column) {
if (row < 0 || row >= grid.length || column < 0 || column >= grid[0].length || grid[row][column] == 0) return 0;
int res = 1;
grid[row][column] = 0;
for (int i = 0; i < ori.length; i++) {
res += mH(grid, row + ori[i][0], column + ori[i][1]);
}
return res;
}
}
执行用时 : 3 ms, 在所有 Java 提交中击败了 82.11% 的用户
内存消耗 : 42.1 MB, 在所有 Java 提交中击败了 89.63% 的用户