你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 01 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。

我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0)(x1, y1) 这两个区域之间的距离是 |x0 - x1| + |y0 - y1|

如果我们的地图上只有陆地或者海洋,请返回 -1

示例 1:

输入:[[1,0,1],[0,0,0],[1,0,1]]
输出:2
解释:
海洋区域 (1, 1) 和所有陆地区域之间的距离都达到最大,最大距离为 2。

示例 2:

输入:[[1,0,0],[0,0,0],[0,0,0]]
输出:4
解释:
海洋区域 (2, 2) 和所有陆地区域之间的距离都达到最大,最大距离为 4。

提示:

  1. 1 <= grid.length == grid[0].length <= 100
  2. grid[i][j] 不是 0 就是 1

解题思路

这个问题和之前的问题Leetcode 994:腐烂的橘子(超详细的解法!!!)非常类似,是一道BFS的问题。我们一开始的时候只需要将所有的1添加到队列中,然后通过BFS遍历整个图,可以遍历到的最远距离就是我们要的结果。

class Solution:def maxDistance(self, grid: List[List[int]]) -> int:r, c = len(grid), len(grid[0])data = list()for i in range(r):for j in range(c):if grid[i][j] == 1:data.append((i, j, 0))d = [(0,1), (0,-1), (1,0), (-1,0)]res = 0while data:i, j, res = data.pop(0)for xd, yd in d:x, y = i + xd, j + ydif 0 <= x < r and 0 <= y < c and grid[x][y] == 0:grid[x][y] = 1data.append((x, y, res+1))return res if res != 0 else -1

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

Leetcode 1162:地图分析(超详细的解法!!!)相关推荐

  1. Leetcode 37:解数独(超详细的解法!!!)

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  2. Leetcode 1229:安排会议日程(超详细的解法!!!)

    你是一名行政助理,手里有两位客户的空闲时间表:slots1 和 slots2,以及会议的预计持续时间 duration,请你为他们安排合适的会议时间. 「会议时间」是两位客户都有空参加,并且持续时间能 ...

  3. Leetcode 503:下一个更大元素 II(超详细的解法!!!)

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...

  4. Leetcode 496:下一个更大元素 I(超详细的解法!!!)

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...

  5. Leetcode 739:每日温度(超详细的解法!!!)

    根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列表 temperatures = [73, 74 ...

  6. Leetcode 29:两数相除(超详细的解法!!!)

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  7. LeetCode:1162. 地图分析+模板链接

    题目 LeetCode:1162. 地图分析 你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地 ...

  8. Leetcode 1022:从根到叶的二进制数之和(超详细的解法!!!)

    给出一棵二叉树,其上每个结点的值都是 0 或 1 .每一条从根到叶的路径都代表一个从最高有效位开始的二进制数.例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么 ...

  9. Leetcode 1135:最低成本联通所有城市(超详细的解法!!!)

    想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号. 给你一些可连接的选项 conections,其中每个选项 conections[i] = [city1, cit ...

最新文章

  1. 项目管理理论与实践(4)——UML应用(上)
  2. JAVA 判断其是否为合法标识符
  3. c语言从E1到E123遍历,试题.习题__2011年c语言实验与习题集.doc
  4. 自带flash的浏览器_小技巧:三步还你一个干净清爽无广告的360浏览器
  5. vue路由跳转权限_如何在vue中实现路由跳转判断用户权限功能?
  6. 洛谷 P1890 gcd区间
  7. addroutes没添加进去_CAD中如何绘制函数曲线及添加数学公式
  8. java毕业设计学生学习评价系统Mybatis+系统+数据库+调试部署
  9. datawhale 学习笔记——建模调参入门
  10. main()打成mian()的后果,切记小心
  11. 实现企业战略目标从做好项目管理开始
  12. 依靠语言和依靠图书馆
  13. Apache Kudu 与 Impala Shell 的结合使用文档(创建表、删、改、查)
  14. C#反射的实现原理及简单应用
  15. 领导给你安排这三个紧急任务(不是器重你而是利用你)
  16. js简繁转换,两种实现方式,妥妥的~
  17. 高度自律是一种怎样的体验(一)(转自知乎)
  18. Python中的姓名和身份证的打印
  19. 高盛:腾讯、阿里和百度将被移出MSCI中国指数IT行业
  20. java中的自动装箱和自动拆箱

热门文章

  1. y4m格式和yuv、bmp格式互转
  2. 股指期货的基差为负值说明什么(股指期货的基差为负值说明什么问题)
  3. 如何在 macOS 使用 AList + RCLONE 把网盘挂载到本地
  4. TCGA_RNA-seq_limma分析
  5. 冬令时和夏令时及国外时间处理
  6. 量化投资学习-19:追涨杀跌,一念地*狱;高抛低吸,一念天*堂
  7. 全球首款短视频聚合应用「酱爆视频」开发技术介绍
  8. 牛客小白月赛16 D-小阳买水果(单调队列)
  9. 2023.0329MySQL数据库
  10. mobaxterm连接不上,ip配置和无法显示,重启网络失败问题