LeetCode第一题——曼哈顿距离
你现在手里有一份大小为 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第一题——曼哈顿距离相关推荐
- 317有人相爱有人夜里看海有人leetcode第一题都做不出来
leetcode第一题 class是一种封装 ->是注释的意思 -> List[int] 表示该函数应返回一个整数列表. nums: List[int], target: int表示应该n ...
- LeetCode第一题:两数之和(Java)
文章目录 前言 一.题目内容 二.解题过程 1. 解题思路 2. 解题代码 三.提交结果 总结 前言 坚持下去便可胜利.只要心还在,梦想还在,我们还可以坚持直至胜利.没有过不去的坎,只有害怕的心.莫害 ...
- leetcode第一题
leetcode刷题思路记录 第一题: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。
第一题 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...
- LeetCode简单题之距离顺序排列矩阵单元格
题目 给定四个整数 row , cols , rCenter 和 cCenter .有一个 rows x cols 的矩阵,你在单元格上的坐标是 (rCenter, cCenter) . 返回矩阵中的 ...
- LeetCode第一题两数之和---JavaScript
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...
- leetcode第一题两数相加
leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...
- LeetCode第一题两数之和
题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案.但是,数 ...
- 剑指offer 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来(leetcode有空就刷系列之找出数组中重复的数字)
数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找 ...
- Leetcode第一题,c_oop宇宙诞生秘要珍宝
#include<stdio.h> /*the boorm sum CreaOir is down a boormsumArCoir-这个 boormsumArCoir 是宇宙诞生的目标, ...
最新文章
- DXF 最简单的一个文件生成两个直线一条直线放入BLOCKS中通过INSERT插入 (2)
- VisualSVN-5.1.5补丁原创发布
- Android安卓APK反编译逆向
- 知乎神回复:普通程序员一天的工作生活是怎样的?网友实名羡慕!
- Java多线程学习四:共有哪 3 类线程安全问题
- 为什么许多程序员讨厌结对编程?
- django使用mysql 好处_Django使用MySQL
- php中until的用法,JavaScript_jQuery中nextUntil()方法用法实例,本文实例讲述了jQuery中nextUntil( - phpStudy...
- talentcentral测评结果_热门推荐!雅诗兰黛2021笔试攻略,最新版Talent Central笔试真题!...
- 【线性代数】6-1:特征值介绍(Introduction to Eigenvalues)
- kubernetes-----pod资源创建与Harbor私有仓库
- C++ 内存泄漏检测工具valgrind简单使用
- 样本均值的分布及中心极限定理
- 什么是SAP ECC企业控制中心系统 ECC简介
- DRF框架及APIView
- 黑马程序员————IO流4(day21)
- 关于host文件、IE代理和nginx的关系
- 最后一个bate版本typora下载,typora快速上手
- python股票技术分析库Ta-Lib安装日记(windows 下 talib 安装)
- 2020数学复习全书习题全解【数学一】-李正元
热门文章
- vscode中使用beautify插件格式化vue文件
- c语言输入坐标三角形周长面积,3.1.7计算三角形周长和面积
- 计算机信息技术结束语,新学期初二年级计算机信息技术课第四节结尾
- 买iPhone担心买到翻新机?教你一招,轻松鉴别各个版本
- 天啦噜!原来Android补间动画可以这么玩
- 捋一捋二分类和多分类中的交叉熵损失函数
- 网站安全公司对渗透测试行业的运营观点
- Digital Twin 数字孪生 工业4.0 SCADA 物联网
- [Open3D ERROR] GLFW Error: WGL: Failed to make context current解决方案
- 侠客群控引擎二次开发SDK可用方法大全(持续更新)