你现在手里有一份大小为 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

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

class Solution {public int maxDistance(int[][] grid) {int N = grid.length;Queue<int[]> queue = new ArrayDeque<>();// 将所有的陆地格子加入队列for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {if (grid[i][j] == 1) {queue.add(new int[]{i, j});}}}// 如果我们的地图上只有陆地或者海洋,请返回 -1。if (queue.isEmpty() || queue.size() == N * N) {return -1;}int distance = -1;while (!queue.isEmpty()) {distance++;int n = queue.size();// 这里一口气取出 n 个结点,以实现层序遍历for (int i = 0; i < n; i++) {int[] cell = queue.poll();     //poll()移除并返问队列头部的元素 int r = cell[0];int c = cell[1];// 遍历上方单元格if (r-1 >= 0 && grid[r-1][c] == 0) {  //cell点正上方存在0grid[r-1][c] = 2;queue.add(new int[]{r-1, c});}// 遍历下方单元格if (r+1 < N && grid[r+1][c] == 0) {       //cell点正下方存在0grid[r+1][c] = 2;queue.add(new int[]{r+1, c});}// 遍历左边单元格if (c-1 >= 0 && grid[r][c-1] == 0) {   //cell点正左边存在0grid[r][c-1] = 2;queue.add(new int[]{r, c-1});}// 遍历右边单元格if (c+1 < N && grid[r][c+1] == 0) {    //cell点正右边存在0grid[r][c+1] = 2;queue.add(new int[]{r, c+1});}}}  return distance;}

思路:首先把所有的陆地放在一个队列中,然后执行第一次循环,将与原陆地距离为1的海洋写入改队列中,然后把原陆地全部删除;然后执行第二次循环,将于原陆地距离为2的海洋写入该队列中,然后删除与原陆地距离为1的所有海洋;以此类推,当队列中没有海洋的时候,就结束循环。所以最远距离就是当队列中没有值时的距离-1,所以为了方便我们把起始距离设为-1,则最后返回的就是最远的距离。

LeetCode第一题——曼哈顿距离相关推荐

  1. 317有人相爱有人夜里看海有人leetcode第一题都做不出来

    leetcode第一题 class是一种封装 ->是注释的意思 -> List[int] 表示该函数应返回一个整数列表. nums: List[int], target: int表示应该n ...

  2. LeetCode第一题:两数之和(Java)

    文章目录 前言 一.题目内容 二.解题过程 1. 解题思路 2. 解题代码 三.提交结果 总结 前言 坚持下去便可胜利.只要心还在,梦想还在,我们还可以坚持直至胜利.没有过不去的坎,只有害怕的心.莫害 ...

  3. leetcode第一题

    leetcode刷题思路记录 第一题: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  4. 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。

    第一题 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

  5. LeetCode简单题之距离顺序排列矩阵单元格

    题目 给定四个整数 row , cols , rCenter 和 cCenter .有一个 rows x cols 的矩阵,你在单元格上的坐标是 (rCenter, cCenter) . 返回矩阵中的 ...

  6. LeetCode第一题两数之和---JavaScript

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...

  7. leetcode第一题两数相加

    leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...

  8. LeetCode第一题两数之和

    题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案.但是,数 ...

  9. 剑指offer 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来(leetcode有空就刷系列之找出数组中重复的数字)

    数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找 ...

  10. Leetcode第一题,c_oop宇宙诞生秘要珍宝

    #include<stdio.h> /*the boorm sum CreaOir is down a boormsumArCoir-这个 boormsumArCoir 是宇宙诞生的目标, ...

最新文章

  1. DXF 最简单的一个文件生成两个直线一条直线放入BLOCKS中通过INSERT插入 (2)
  2. VisualSVN-5.1.5补丁原创发布
  3. Android安卓APK反编译逆向
  4. 知乎神回复:普通程序员一天的工作生活是怎样的?网友实名羡慕!
  5. Java多线程学习四:共有哪 3 类线程安全问题
  6. 为什么许多程序员讨厌结对编程?
  7. django使用mysql 好处_Django使用MySQL
  8. php中until的用法,JavaScript_jQuery中nextUntil()方法用法实例,本文实例讲述了jQuery中nextUntil( - phpStudy...
  9. talentcentral测评结果_热门推荐!雅诗兰黛2021笔试攻略,最新版Talent Central笔试真题!...
  10. 【线性代数】6-1:特征值介绍(Introduction to Eigenvalues)
  11. kubernetes-----pod资源创建与Harbor私有仓库
  12. C++ 内存泄漏检测工具valgrind简单使用
  13. 样本均值的分布及中心极限定理
  14. 什么是SAP ECC企业控制中心系统 ECC简介
  15. DRF框架及APIView
  16. 黑马程序员————IO流4(day21)
  17. 关于host文件、IE代理和nginx的关系
  18. 最后一个bate版本typora下载,typora快速上手
  19. python股票技术分析库Ta-Lib安装日记(windows 下 talib 安装)
  20. 2020数学复习全书习题全解【数学一】-李正元

热门文章

  1. vscode中使用beautify插件格式化vue文件
  2. c语言输入坐标三角形周长面积,3.1.7计算三角形周长和面积
  3. 计算机信息技术结束语,新学期初二年级计算机信息技术课第四节结尾
  4. 买iPhone担心买到翻新机?教你一招,轻松鉴别各个版本
  5. 天啦噜!原来Android补间动画可以这么玩
  6. 捋一捋二分类和多分类中的交叉熵损失函数
  7. 网站安全公司对渗透测试行业的运营观点
  8. Digital Twin 数字孪生 工业4.0 SCADA 物联网
  9. [Open3D ERROR] GLFW Error: WGL: Failed to make context current解决方案
  10. 侠客群控引擎二次开发SDK可用方法大全(持续更新)