博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 695. Max Area of Island
阅读量:7265 次
发布时间:2019-06-29

本文共 2755 字,大约阅读时间需要 9 分钟。

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.

解法1:dfs

class Solution(object):    def maxAreaOfIsland(self, grid):        """        :type grid: List[List[int]]        :rtype: int        """        # reset 1 to 0 use dfs, and return the ones numer        row = len(grid)        col = len(grid[0])        ans = 0                def dfs(grid, i, j):                        if i==row or j==col or i<0 or j<0 or grid[i][j]==0: return 0                           res = 1            grid[i][j] = 0            res += dfs(grid, i+1, j)            res += dfs(grid, i-1, j)            res += dfs(grid, i, j-1)            res += dfs(grid, i, j+1)            return res                for i in range(0, row):            for j in range(0, col):                if grid[i][j] == 1:                    ans = max(ans, dfs(grid, i, j))        return ans

解法2:BFS,必须在if里将1reset为0,否则有重复:

class Solution(object):    def maxAreaOfIsland(self, grid):        """        :type grid: List[List[int]]        :rtype: int        """        # reset 1 to 0 use bfs, and return the ones numer        row = len(grid)        col = len(grid[0])        ans = 0                def bfs(grid, i, j):                        assert grid[i][j] == 1            q = [(i,j)]            grid[i][j]=0            res = 1            while q:                                q2 = []                for i,j in q:                                        if i+1
=0 and grid[i-1][j]==1: grid[i-1][j]=0 q2.append((i-1,j)) res += 1 if j+1=0 and grid[i][j-1]==1: grid[i][j-1]=0 q2.append((i,j-1)) res += 1 q = q2 return res for i in range(0, row): for j in range(0, col): if grid[i][j] == 1: ans = max(ans, bfs(grid, i, j)) return ans

 

转载地址:http://tzgdm.baihongyu.com/

你可能感兴趣的文章
PendingIntent
查看>>
自动登录多个IDC机房(expect+shell)
查看>>
MongoDB 主从集群配置
查看>>
托管代码和非托管代码的区别
查看>>
设计模式--组合模式
查看>>
rsync文件同步应用--服务器端的配置
查看>>
开灯关灯问题
查看>>
Discuz非创始人管理员代码执行
查看>>
利用Hibernate Validator实现对Bean的参数验证
查看>>
CPython 和IronPython的基准测试
查看>>
输入的命令集锦
查看>>
非域环境下安装并配置Project Server 2007(四)
查看>>
Oracle 11g RAC安装注意事项杂记
查看>>
Nginx替换apache的实施方案二
查看>>
防止死机二十四招
查看>>
使用C#获取CPU及硬盘序列号的源代码
查看>>
网络编程释疑之:TCP半开连接的处理
查看>>
模块化安装与删除openstack的dev(control、compute)与folsom(control)版本
查看>>
快速预览Office 15服务端:Exchange 2013
查看>>
使php支持pdo_mysql、pdo_pgsql与追加编译mb_string
查看>>