题目

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
通过次数17,386提交次数38,093

代码

class Solution {public:int maxDistance(vector<vector<int>>& grid) {int N = grid.size();int count_land = 0;int count_turn = 0;int count_last_space;for(int i=0;i<N;i++){for(int j =0;j<N;j++){if(grid[i][j]==1){count_land++;}}}if(count_land==N*N||count_land==0){return -1;}count_last_space = N*N-count_land;while(count_last_space!=0){count_turn++;#计算当前这个点的上下左右for(int i=0;i<N;i++){for(int j=0;j<N;j++){if(grid[i][j]==count_turn){if(i>0&&grid[i-1][j]==0){grid[i-1][j]=count_turn+1;count_last_space--;}if(i<N-1&&grid[i+1][j]==0){grid[i+1][j]=count_turn+1;count_last_space--;}if(j>0&&grid[i][j-1]==0){grid[i][j-1]=count_turn+1;count_last_space--;}if(j<N-1&&grid[i][j+1]==0){grid[i][j+1]=count_turn+1;count_last_space--;}}}}}return count_turn;}
};

大佬总结的模板

class Solution {public:int maxDistance(vector<vector<int>>& grid) {const int M = grid.size();const int N = grid[0].size();// 使用deque作为队列deque<pair<int, int>> deq;for (int i = 0; i < M; ++i) {for (int j = 0; j < N; ++j) {if (grid[i][j] == 1) {// 将所有陆地都放入队列中deq.push_back({i, j});}}}// 如果没有陆地或者海洋,返回-1if (deq.size() == 0 || deq.size() == M * N) {return -1;}// 由于BFS的第一层遍历是从陆地开始,因此遍历完第一层之后distance应该是0int distance = -1;// 对队列的元素进行遍历while (deq.size() != 0) {// 新遍历了一层distance ++;// 当前层的元素有多少,在该轮中一次性遍历完当前层int size = deq.size();while (size --) {// BFS遍历的当前元素永远是队列的开头元素auto cur = deq.front(); deq.pop_front();// 对当前元素的各个方向进行搜索for (auto& d : directions) {int x = cur.first + d[0];int y = cur.second + d[1];// 如果搜索到的新坐标超出范围/陆地/已经遍历过,则不搜索了if (x < 0 || x >= M || y < 0 || y >= N ||grid[x][y] != 0) {continue;}// 把grid中搜索过的元素设置为2grid[x][y] = 2;// 放入队列中deq.push_back({x, y});}}}// 最终走了多少层才把海洋遍历完return distance;}
private:vector<vector<int>> directions = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
};

思路

BFS和DFS(如果需要删除,请联系我)
https://blog.csdn.net/u011437229/article/details/53188837?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
带图https://blog.csdn.net/weixin_40953222/article/details/80544928?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
模板(如果需要删除,请联系我)
https://blog.csdn.net/fuxuemingzhu/article/details/101900729

LeetCode:1162. 地图分析+模板链接相关推荐

  1. LeetCode - 1162 地图分析

    题目来源 1162. 地图分析 - 力扣(LeetCode) 题目描述 你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了.其中 0 代表海洋,1  ...

  2. LeetCode 1162. 地图分析(BFS)

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

  3. LeetCode 1162 地图分析

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

  4. leetcode:1162. 地图分析

    题目来源 leetcode:1162. 地图分析 题目描述 题目解析 题目分析 本题要求:求所有海洋点到离它最近的陆地点的距离的最大值. 问题:什么是距离?这里是曼哈顿距离,就是只能沿着横.竖到达另外 ...

  5. zabbix监控交换机(附模板链接)

    目的 zabbix本身可以通过SNMP协议对交换机等网络设备进行监控,本文针对H3C交换机设备进行zabbix监控项配置指导,旨在指导技术人员操作实施网络设备的监控 监控模板下载链接 : https: ...

  6. Leetcode 1162:地图分析(超详细的解法!!!)

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

  7. LeetCode刷题模板(1):《我要打10个》之二分法

    Author       :  叨陪鲤 Email         : vip_13031075266@163.com Date          : 2021.01.23 Copyright : 未 ...

  8. 国内大学论文latex模板链接

    转自:http://emuch.net/html/201207/4685325.html 国防科学技术大学研究生学位论文LaTeX模板 南开大学学位论文LaTeX模板(孙文昌老师) 华南理工大学硕/博 ...

  9. 【Leetcode】背包问题模板

    https://leetcode-cn.com/problems/combination-sum-iv/solution/xi-wang-yong-yi-chong-gui-lu-gao-ding-b ...

最新文章

  1. 【从零开始的ROS四轴机械臂控制】(七)- ROS与arduino连接
  2. 2017年中国人工智能产业专题研究报告(完整版)
  3. java怎么表示10 2_java -Xmx1G是否表示10 ^ 9或2 ^ 30字节?
  4. 【杂记】2020年度中国医院排行榜
  5. 初识德国的小朋友兴趣课程
  6. 为什么QueueingConsumer会被Deprecated?
  7. 反爬终极方案总结---字体反爬
  8. groovy使用范型的坑
  9. (转)无特征过狗一句话猥琐思路
  10. mysql pxc_MySQL之PXC集群搭建
  11. 3-5 单链表分段逆转 (20 分)
  12. win7c盘空间越来越小_C盘空间越来越小?学会这几招,让你轻松驾驭磁盘管理
  13. python 的基础 学习 第四天 基础数据类型
  14. 把数字翻译成字符串(递归,动态规划)
  15. 解决报错Cannot connect to the Maven process. Try again later. If the problem persists, check the
  16. file.getOriginalFilename()
  17. 【手绘漫画】面试必考之手撕双链表(解题模板和深度剖析),(LeetCode 707)
  18. Android 查看第三方应用进程的内存开销
  19. HTML5常用标签及属性
  20. P2495 [SDOI2011]消耗战

热门文章

  1. Python numpy.transpose 详解
  2. 地理信息系统专业考研 GIS专业考研 名词解释大全
  3. html setdate方法,JavaScript设置一个月的某一天的方法setDate()
  4. 【前端知识之JS】如何实现上拉加载和下拉刷新
  5. 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员复审考试
  6. 上海市个人网上办税应用平台
  7. 买白酒时,看清瓶身“这行字”,轻松分辨勾兑酒和纯粮酒
  8. 英菲克静音无线鼠标:让工作更安静更顺畅
  9. 开车还是开船爱惜自己的车子
  10. 斗鱼扩展--notifications提示(十二)