LeetCode-1765 地图中的最高点
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/map-of-highest-peak
题目描述
给你一个大小为 m x n 的整数矩阵 isWater ,它代表了一个由 陆地 和 水域 单元格组成的地图。
如果 isWater[i][j] == 0 ,格子 (i, j) 是一个 陆地 格子。
如果 isWater[i][j] == 1 ,格子 (i, j) 是一个 水域 格子。
你需要按照如下规则给每个单元格安排高度:
每个格子的高度都必须是非负的。
如果一个格子是是 水域 ,那么它的高度必须为 0 。
任意相邻的格子高度差 至多 为 1 。当两个格子在正东、南、西、北方向上相互紧挨着,就称它们为相邻的格子。(也就是说它们有一条公共边)
找到一种安排高度的方案,使得矩阵中的最高高度值 最大 。
请你返回一个大小为 m x n 的整数矩阵 height ,其中 height[i][j] 是格子 (i, j) 的高度。如果有多种解法,请返回 任意一个 。
示例 1:

输入:isWater = [[0,1],[0,0]]
输出:[[1,0],[2,1]]
解释:上图展示了给各个格子安排的高度。
蓝色格子是水域格,绿色格子是陆地格。
示例 2:

输入:isWater = [[0,0,1],[1,0,0],[0,0,0]]
输出:[[1,1,0],[0,1,1],[1,2,2]]
解释:所有安排方案中,最高可行高度为 2 。
任意安排方案中,只要最高高度为 2 且符合上述规则的,都为可行方案。
提示:
m == isWater.length
n == isWater[i].length
1 <= m, n <= 1000
isWater[i][j] 要么是 0 ,要么是 1 。
至少有 1 个水域格子。
解题思路
一道标注的BFS题,已知水面的高度必然为0,而相邻地块的高度差只能为1,所以在已知水域位置的情况下,地表高度其实是固定的,从水域出发,像附近的地块依次进行高度差为1的扩展,最后扩展出的地形就是所求的地形。
代码展示
class Solution {
public:
vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
vector<vector<int>> vviRet;
int iM = isWater.size();
int iN = isWater[0].size();
vector<int> viTemp;
viTemp.resize(iN, -1);
vviRet.resize(iM, viTemp);
queue<pair<int, int>> queuepairiiVisiting;
for(int i = 0; i < iM; i ++)
{
for(int j = 0; j < iN; j++)
{
if(isWater[i][j])
{
vviRet[i][j] = 0;
queuepairiiVisiting.push({i, j});
}
}
}
while(!queuepairiiVisiting.empty())
{
int i = queuepairiiVisiting.front().first;
int j = queuepairiiVisiting.front().second;
queuepairiiVisiting.pop();
int iHeight = vviRet[i][j];
if(i - 1 >= 0 && vviRet[i - 1][j] == -1)
{
vviRet[i - 1][j] = iHeight + 1;
queuepairiiVisiting.push({i - 1, j});
}
if(i + 1 < iM && vviRet[i + 1][j] == -1)
{
vviRet[i + 1][j] = iHeight + 1;
queuepairiiVisiting.push({i + 1, j});
}
if(j - 1 >= 0 && vviRet[i][j - 1] == -1)
{
vviRet[i][j - 1] = iHeight + 1;
queuepairiiVisiting.push({i, j - 1});
}
if(j + 1 < iN && vviRet[i][j + 1] == -1)
{
vviRet[i][j + 1] = iHeight + 1;
queuepairiiVisiting.push({i, j + 1});
}
}
return vviRet;
}
};
运行结果

LeetCode-1765 地图中的最高点的更多相关文章
- (UWP)通过编写算法实现在地图中的渐变路径
目前的一个App中需要实现这个需求,但是在UWP自带的Bing Map中,绘制的MapPolyline的StrokeColor的类型是Windows.UI.Color,也就是说一条MapPolylin ...
- 利用HTML5 Geolocation API在百度地图中显示你的位置
代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <met ...
- 在地图中调用显示FeatureLayer并进行render、popupTemplate、添加图例等相关内容的设置
ArcGIS Server发布完FeatureLayer后,就可以在自己的代码中调用并在地图上显示出来了. 一.代码框架 调用FeatureLayer,要在require开头引入"esri/ ...
- LeetCode:数组中的第K个最大元素【215】
LeetCode:数组中的第K个最大元素[215] 题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: ...
- C#+ArcGIS Engine 获取地图中选中的要素
转自 C#+ArcGIS Engine 获取地图中选中的要素 C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下: List<IFeatu ...
- GIS学习 Geoserver使用添加、删除、查询地图中的POI
geoserverwfs:Querywfs:Deletewfs:Updatewfs:Insert 在geoserver自定义的地图中通过geoserver wfs 查询,删除,添加相关的POI. 相 ...
- 前端与算法 leetcode 387. 字符串中的第一个唯一字符
目录 # 前端与算法 leetcode 387. 字符串中的第一个唯一字符 题目描述 概要 提示 解析 解法一:双循环 解法二:Set法单循环 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...
- 百度地图中如何获取到发布的SHA1
百度地图中如何获取到发布的SHA1 下面介绍的是一种通过命令的方式获取到发布版SHA1的方法: 打开Android的命令行Terminal: 1.首先进入到.android文件所在的目录,我的是如下图 ...
- LeetCode.1185-一周中的星期几(Day of the Week)
这是小川的第415次更新,第448篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第266题(顺位题号是1185).给定日期,返回该日期的星期几.输入为三个整数,分别代表日,月和 ...
- LeetCode.993-二叉树中的堂兄弟(Cousins in Binary Tree)
这是悦乐书的第374次更新,第401篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第235题(顺位题号是993).在二叉树中,根节点在深度0处,并且每个深度为k的节点的子 ...
随机推荐
- STM32用寄存器实现电平翻转(一个按键控制LED灯的开关)
代码 GPIOx -> ODR ^= GPIO_Pin_x 如果加载了标准库的文件: GPIOx中的x可以为(A,B,C,D--) GPIO_Pin_x中的x可以为(1,2,3--) 如果没有加 ...
- java中继承的内存分析
本文主要讲述java中继承的内存分析. 示例1,代码如下: public class EncapsulationTest { public static void main(String[] args ...
- CMS可视化---ECharts图表
一.ECharts介绍 ECharts,全称Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,能够流畅的运行在PC以及移动设备上,兼容当前绝大部分浏览器.为我们许 ...
- error: expected ‘)’ before ‘PRIx64’
打印uint64时编译报错 printf("prefix:0x%"PRIx64"\n",ipv6Prefix); 解决办法:添加头文件 #include < ...
- elasticsearch之单请求多查询
一.需要解决的问题 有的时候我们需要同时执行多个查询,并且需要得到每个单独查询的搜索结果,elasticsearch提供了multi search此需求的支持: 二.elasticsearch mul ...
- .net core操作MongoDB
前言 现实中认识的一个搞java(百万富婆)的大佬,已经转行做抖音主播了,搞技术的只能赶在年前再水一篇博客,不足之处欢迎拍砖,以免误人子弟,呔,真是太难受了 环境准备 .net core 3.1 Mo ...
- mysql 复制数据
1.表存在 insert into table_name(key1,key2) select key3,key4 from table_name_2; 2.表不存在 create table test ...
- java进阶篇——Stream流编程
Stream流 函数式接口 1.消费型接口--Consumer @FunctionalInterface public interface Consumer<T> { /** * 对给定的 ...
- [Unity]限制两个物体之间的距离
//限制两个物体之间的距离 if (Vector3.Distance(B.position, A.position) > maxDistance) { //获得两个物体之间的单位向量 Vecto ...
- 穿透的switch语句-循环概述与基本组成部分
穿透的switch语句 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束. pu ...