LeetCode:695

https://leetcode.cn/problems/max-area-of-island/description/

难度:中等

网格图 DFS,类似 LeetCode 200 岛屿数量,增加一个当前岛屿面积的计算。

时间复杂度:O(mn),其中 m 和 n 分别为 grid 的行数和列数。

空间复杂度:O(mn)。最坏情况下,递归需要 O(mn) 的栈空间。

class Solution {
public:
    int maxAreaOfIsland(vector<vector<int>>& grid) {
        int m = grid.size(), n = grid[0].size();
        int mx = 0;
        auto dfs = [&](auto &&dfs, int i, int j) -> int {
            if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != 1) {
                return 0;
            }
            grid[i][j] = -1;
            int ans = 1;
            ans += dfs(dfs, i, j - 1);
            ans += dfs(dfs, i, j + 1);
            ans += dfs(dfs, i - 1, j);
            ans += dfs(dfs, i + 1, j);
            return ans;
        };
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == 1) {
                    mx = max(mx, dfs(dfs, i, j));
                }
            }
        }
        return mx;
    }
};