zoukankan      html  css  js  c++  java
  • leetcode695.岛屿的最大面积

    给定一个包含了一些 0 和 1 的非空二维数组 grid 。

    一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

    找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)

    示例 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]]
    对于上面这个给定矩阵应返回 6。注意答案不应该是 11 ,因为岛屿只能包含水平或垂直的四个方向的 1 。

    示例 2:

    [[0,0,0,0,0,0,0,0]]
    对于上面这个给定的矩阵, 返回 0。

    注意: 给定的矩阵grid 的长度和宽度都不超过 50。

    class Solution {
    public:
        int dfs(int x, int y, vector<vector<int>>& grid) {
        if(x < 0 || y < 0 || x >= grid.size() || y >= grid[0].size() || grid[x][y] == 0)
            return 0;
            grid[x][y] = 0;
            int num = 1;
            num += dfs(x+1, y, grid);
            num += dfs(x-1, y, grid);
            num += dfs(x, y+1, grid);
            num += dfs(x, y-1, grid);
            return num;
    }
        int maxAreaOfIsland(vector<vector<int>>& grid) {
            int res = 0;
            for(int i = 0; i < grid.size(); ++i) {
                for(int j = 0; j < grid[0].size(); ++j) {
                    if(grid[i][j] == 1) {
                        res = max(res, dfs(i, j, grid));
                    }
                }
            }
            return res;
        }
    };
  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/joker1937/p/13111257.html
Copyright © 2011-2022 走看看