Leetcode 1162:地图分析(超详细的解法!!!)
你现在手里有一份大小为 N x N 的『地图』(网格) grid
,上面的每个『区域』(单元格)都用 0
和 1
标记好了。其中 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 <= grid.length == grid[0].length <= 100
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:地图分析(超详细的解法!!!)相关推荐
- Leetcode 37:解数独(超详细的解法!!!)
编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...
- Leetcode 1229:安排会议日程(超详细的解法!!!)
你是一名行政助理,手里有两位客户的空闲时间表:slots1 和 slots2,以及会议的预计持续时间 duration,请你为他们安排合适的会议时间. 「会议时间」是两位客户都有空参加,并且持续时间能 ...
- Leetcode 503:下一个更大元素 II(超详细的解法!!!)
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...
- Leetcode 496:下一个更大元素 I(超详细的解法!!!)
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...
- Leetcode 739:每日温度(超详细的解法!!!)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列表 temperatures = [73, 74 ...
- Leetcode 29:两数相除(超详细的解法!!!)
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- LeetCode:1162. 地图分析+模板链接
题目 LeetCode:1162. 地图分析 你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地 ...
- Leetcode 1022:从根到叶的二进制数之和(超详细的解法!!!)
给出一棵二叉树,其上每个结点的值都是 0 或 1 .每一条从根到叶的路径都代表一个从最高有效位开始的二进制数.例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么 ...
- Leetcode 1135:最低成本联通所有城市(超详细的解法!!!)
想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号. 给你一些可连接的选项 conections,其中每个选项 conections[i] = [city1, cit ...
最新文章
- 项目管理理论与实践(4)——UML应用(上)
- JAVA 判断其是否为合法标识符
- c语言从E1到E123遍历,试题.习题__2011年c语言实验与习题集.doc
- 自带flash的浏览器_小技巧:三步还你一个干净清爽无广告的360浏览器
- vue路由跳转权限_如何在vue中实现路由跳转判断用户权限功能?
- 洛谷 P1890 gcd区间
- addroutes没添加进去_CAD中如何绘制函数曲线及添加数学公式
- java毕业设计学生学习评价系统Mybatis+系统+数据库+调试部署
- datawhale 学习笔记——建模调参入门
- main()打成mian()的后果,切记小心
- 实现企业战略目标从做好项目管理开始
- 依靠语言和依靠图书馆
- Apache Kudu 与 Impala Shell 的结合使用文档(创建表、删、改、查)
- C#反射的实现原理及简单应用
- 领导给你安排这三个紧急任务(不是器重你而是利用你)
- js简繁转换,两种实现方式,妥妥的~
- 高度自律是一种怎样的体验(一)(转自知乎)
- Python中的姓名和身份证的打印
- 高盛:腾讯、阿里和百度将被移出MSCI中国指数IT行业
- java中的自动装箱和自动拆箱