力扣1765. 地图中的最高点(#Day23)
2023-02-18 16:23:56 时间
力扣1765. 地图中的最高点
拿到岛屿问题一般的解决方案是BFS和DFS即广度优先搜索和深度优先搜索,对于本题,更适用于使用BFS广度优先算法。
解题思路如下:首先将isWater初始化为-1表示陆地,然后找到所有初始的水域节点并使用队列记录水域节点的坐标,用0表示水域,初始化后的状态见下图状态2。
然后对所有水域节点向外扩散进行BFS,每向外扩散一圈,高度加1。由于不能重复修改某个点位置的高度,所以需要判断如果当前高度为-1,即没有进行过高度赋值时进行高度的增加。
from collections import deque
from typing import List
def highestPeak(isWater: List[List[int]]) -> List[List[int]]:
m, n = len(isWater), len(isWater[0])
# 初始化高度-1为陆地,0为水域
res = [[-1 for water in row] for row in isWater]
q = deque()
for i, row in enumerate(isWater):
for j, water in enumerate(row):
if water == 1:
q.append((i, j))
res[i][j] = 0
while q:
i, j = q.popleft() # 从队头取出坐标
for x, y in ((i-1, j), (i+1, j), (i, j-1), (i, j+1)): # 遍历周围的陆地
if 0 <= x < m and 0 <= y < n and res[x][y] == -1: # 如果没有越界,陆地也没有被更新过则高度加1
res[x][y] = res[i][j] + 1
q.append((x, y))
return res
isWater = [[0, 0, 1], [1, 0, 0], [0, 0, 0]]
print(highestPeak(isWater)) # [[1, 1, 0], [0, 1, 1], [1, 2, 2]]
END
相关文章
- 软硬件融合技术内幕 终极篇 (1) 从硝烟中走来
- 软硬件融合技术内幕 终极篇 (2) 从摩尔斯电码到柏林墙
- 软硬件融合技术内幕 终极篇 (3) 吴某凡应该蹲几年?
- 软硬件融合技术内幕 终极篇 (4) —— 人类历史的丰碑
- 软硬件融合技术内幕 终极篇 (5) —— 中华文明的瑰宝
- 网站接入“公益404”
- 2023 年 5 大人工智能趋势 ?
- 2021版 WordPress速度及性能优化终极指南 - WP小白
- 浅谈网页暗模式的实现
- 内网穿透 - 反向代理 - FRP 使用指南
- 视频解析方法及原理!(以爱奇艺为例)
- 完美解决Win11无法启动安全中心
- 解决CSS属性position:fixed不起作用
- 为什么DOE试验设计在企业难以推行?
- flask蓝图小结
- Yolo实用指南(step by step)之一环境搭建
- Yolo实用指南(step by step)之二labelme进行数据标注
- openGauss内核分析(一):多线程架构启动过程详解
- openGauss 3.1.0 版本gs_stack功能解密
- VM系列振弦采集模块 温度传感器使用及UART 通讯参数