1162. 地图分析

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

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

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

示例 1:

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

示例 2:

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

提示:

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

Solution:

其实这一题跟number of islands很像,都是bfs把0变1的4-way搜索。对于每一个0(water),都存在离它最近的陆地距离,需要找到所有的距离中的最大值。解法就是把陆地放到deque队列中,再逐层搜索,每一次把d=1,d=2,...递增的所有的0都找到并变为1,逐层distance增加,最后返回的就是最大距离。

1from collections import deque 2 3class Solution(object): 4 def maxDistance(self, grid): 5 """ 6 :type grid: List[List[int]] 7 :rtype: int 8 """ 9 10 lands = deque([]) # python的队列是deque 11 n, res = len(grid), -1 12 for x in range(n): 13 for y in range(n): 14 if grid[x][y]: # land found 15 lands.append((x, y)) 16 17 if len(lands) == 0 or len(lands) == n*n: 18 return res 19 20 dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] 21 while lands: 22 num = len(lands) 23 for _ in range(num): 24 x0, y0 = lands.popleft() # tuple还能这样用 25 for i in range(4): # 4-way bfs search 26 x, y = x0 + dx[i], y0 + dy[i] 27 if 0 <= x < n and 0 <= y < n and not grid[x][y]: # water found 28 grid[x][y] = 1 # 很像number of islands 29 lands.append((x, y)) 30 res += 1 31 32 return res
点赞
收藏

评论区

加载中...

相关推荐

一篇文章带你了解HTML的网页布局结构

大家好,我是IT共享者,人称皮皮。这篇我们来讲讲CSS网页布局。一、网页布局网页布局有很多种方式,一般分为以下几个部分:头部区域、菜单导航区域、内容区域、底部区域。1\.头部区域头部区域位于整个网页的顶部,一般用于设置网页的标题或者网页的logo:例CSS项目(runoob.com)bodymargin:0;/头部样式/.heade

Foxnic-Web 代码生成 (8) —— 配置列表页

列表页面主要包含了顶部的搜索区域和表格区域,搜索区域有点类似表单,配置上可能存在相似之处。本篇我们就来了解一下,在代码生成时的列表页呈现方面,我们可以做点啥。

Python爬取所有人位置信息,制作任意区域人流量显示图

最近偶然看到了腾讯的大数据星云图,非常漂亮,如下图:这些数据代表使用腾讯定位服务的用户实际地理位置,例如微信、QQ、腾讯地图等,所以使用量还是表达的,此图可以间接显示人流量情况该网站还可以查看区域热力图:但是只有个别区域于是我萌生一个想法,用python任意区域人员流量图经过不懈努力,没想到还真给实现了,下面带大家一起学习一下这一过程:一、首先是数据获取

Secondary ,Supplementary alignment 和bwa mem的

1.supplementaryalignmentsupplementaryalignment是指一条read的一部分和参考区域1比对成功,另一部分和参考区域2比对成功,参考区域1和参考区域2没有交集(或很少),那么一条read就会产生两条sam文件,将其中的一条sam文件作为representalignment,而另一条作为supplement

ABB安全区域和中断一起连用案例解析

MODULEXXXX  !定义临时全局区域数据  VARwztemporaryconveyor;  !定义全局区域形状数据  VARshapedatavolume;  !定义中断识别号  VARintnumempty;  !定义全局区域形状设定数据位置点1和点2  persposcorner1

Java中当前对象引用

题:计算机画图时,有点的概念,每个点由它的横坐标x和纵坐标y描述。写一个类。求两个点之间的曼哈顿距离横向距离纵向距离例如,一个点(0,0)和另一个点(1,1)的曼哈顿距离为2packagetest;publicclassPoint{

1162. 地图分析 - HelloWorld