789. 逃脱阻碍者

789. 逃脱阻碍者

你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] = [xi, yi] 出发。所有输入均为 整数坐标 。

每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置 1 个单位 的新位置。当然,也可以选择 不动 。所有动作 同时 发生。

如果你可以在任何阻碍者抓住你 之前 到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者同时到达了一个位置(包括目的地)都不算是逃脱成功。

只有在你有可能成功逃脱时,输出 true ;否则,输出 false 。

示例 1:

输入:ghosts = [[1,0],[0,3]], target = [0,1]
输出:true
解释:你可以直接一步到达目的地 (0,1) ,在 (1, 0) 或者 (0, 3) 位置的阻碍者都不可能抓住你。
示例 2:

输入:ghosts = [[1,0]], target = [2,0]
输出:false
解释:你需要走到位于 (2, 0) 的目的地,但是在 (1, 0) 的阻碍者位于你和目的地之间。
示例 3:

输入:ghosts = [[2,0]], target = [1,0]
输出:false
解释:阻碍者可以和你同时达到目的地。
示例 4:

输入:ghosts = [[5,0],[-10,-2],[0,-5],[-2,-2],[-7,1]], target = [7,7]
输出:false
示例 5:

输入:ghosts = [[-1,0],[0,1],[-1,0],[0,1],[-1,0]], target = [0,0]
输出:true

image.png

解题思路

曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|

我们只需要计算阻碍者和终点的曼哈顿距离,以及起点和终点的曼哈顿距离,就可以判断能否逃脱了。

因为曼哈顿距离是到达终点的最快路径,如果阻碍者和终点的曼哈顿距离更小,他就可以在终点等我们,我们必死。
在这里插入图片描述

(假设我们阻碍者到终点的曼哈顿距离比我们大)从图中可以看出,我们一直沿着最优路径(曼哈顿距离)走的话,如果在某个点被拦截的话,那么说明后面阻碍者可以沿着我们的最优路径一直走到终点,这意味着阻碍者的最优路径长度是和我们一样的,这与题意(阻碍者到终点的曼哈顿距离比我们大)相反,所以我们只需要判断曼哈顿距离即可知道我们是否会被拦截

代码

class Solution {public boolean escapeGhosts(int[][] ghosts, int[] target) {int tar = Math.abs(target[0])+ Math.abs(target[1]);for (int[] ghost : ghosts) {int gTar = Math.abs(target[0]-ghost[0])+ Math.abs(target[1]-ghost[1]);if (gTar<=tar)return false;}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉-自定义对象检测器

1、模板匹配 运行指令&#xff1a;python template_matching.py --source 3.jpg --template 2.jpg import argparse import cv2ap argparse.ArgumentParser() ap.add_argument("-s", "--source", requiredTrue, help"Path to the source image"…

Java 微信公众号导出所有粉丝(openId)

由于公众号换了公司主体&#xff0c;需要做迁移&#xff0c;玩家的openId数据需要做处理。 (我是按我要的json格式&#xff0c;将粉丝导成了1万条数据的一个json文件) 文件格式&#xff1a; {"info":[{"openId":"ogVous494ltuNmO4zHb1seHeGLSk"}…

javascript闭包_JavaScript闭包教程–带有JS闭包示例代码

javascript闭包Closures – many of you JavaScript devs have probably heard this term before. When I started my journey with JavaScript, I encountered closures often. And I think theyre one of the most important and interesting concepts in JavaScript. 闭包–…

1646. 获取生成数组中的最大值

1646. 获取生成数组中的最大值 给你一个整数 n 。按下述规则生成一个长度为 n 1 的数组 nums &#xff1a; nums[0] 0 nums[1] 1 当 2 < 2 * i < n 时&#xff0c;nums[2 * i] nums[i] 当 2 < 2 * i 1 < n 时&#xff0c;nums[2 * i 1] nums[i] nums[i …

docker保存日志文件到本地

其实很简单 docker logs 你需要添加的额外参数 容器id >文件名称 然后查看这个文件就可以了&#xff0c;也可以通过ftp协议下载到本地

防反射JavaScript –如何让您的JS等待

Debounce methods do not execute when invoked. Instead, they wait for a predetermined time before executing. If the same method is called again, the previous is cancelled and the timer restarts.防抖动方法在调用时不执行。 而是&#xff0c;它们在执行之前等待预…

21天学通Visual.Basic pdf

下载地址&#xff1a;网盘下载《21天学通Visual Basic(第2版)》是Visual Basic 6.0的入门教程&#xff0c;主要针对没有程序设计基础的读者&#xff0c;详细介绍了Visual Basic 6.0的基本概念和编程技术。书中通过大量的范例及综合练习来介绍Visual Basic 6.0的基本概念、语言特…

297. 二叉树的序列化与反序列化

297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

交互式图表_如何构建罗马数字转换器和交互式罗马数字图表

交互式图表The Roman numerals are no longer an essential part of our daily lives. But we do use them when designing monuments, clocks, and even for sporting events.罗马数字不再是我们日常生活中必不可少的部分。 但是我们在设计纪念碑&#xff0c;钟表甚至体育赛事…

Python 08 面向对象

Python 面向对象 1、编程范式 2、面向对象特性 3、属性、方法 4、三大特性 5、高级方法 6、类的特殊成员方法 7、反射 8、异常处理 9、单例模式 一、编程范式 编程&#xff1a;程序员用特定的语法数据结构算法组成的代码来告诉计算机如何执行任务的过程 &#xff0c; 实现一个…

eclipse手动添加SVN插件

https://www.cnblogs.com/hcl1991/p/5888461.html 1.手动下载svn插件&#xff08;百度SVNsite-1.8.18&#xff09; 2.将下载好的SVNsite-1.8.18.zip 解压 3.在eclipse安装目录的plugins新建SVN文件夹 4.将SVNsite-1.8.18解压包下的features和plugins拷贝到新建的SVN文件夹下 5.…

440. 字典序的第K小数字

440. 字典序的第K小数字 给定整数 n 和 k&#xff0c;找到 1 到 n 中字典序第 k 小的数字。 注意&#xff1a;1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9]&#xff0c;所以第二小的数字是…

微信小程序 设置背景占满整个页面

微信小程序,默认的根节点是<page></page>&#xff0c;所有内容都包裹在这个标签里&#xff0c;如何让页面的背景占满整个屏幕&#xff1f;&#xff1f; <page><view class"bg">....</view> </page> .bg {background-image:ur…

udemy下载课程无法播放_最好的Udemy Web开发课程+热门免费课程

udemy下载课程无法播放Heres a list of some of the most popular web development courses on Udemy:以下是Udemy上一些最受欢迎的Web开发课程的列表&#xff1a; Best General Web Development Courses on Udemy:关于Udemy的最佳常规Web开发课程&#xff1a; The Complete …

渗透测试初学者_渗透测试许可证:面向初学者的道德黑客课程

渗透测试初学者A penetration test is an authorized cyberattack on a computer system, performed to evaluate the security of the system. 渗透测试是对计算机系统的授权网络攻击&#xff0c;旨在评估系统的安全性。 Weve released a full pentesting course on the free…

Codeforces 915 E Physical Education Lessons

题目描述 This year Alex has finished school, and now he is a first-year student of Berland State University. For him it was a total surprise that even though he studies programming, he still has to attend physical education lessons. The end of the term is …

JDK 11 还有一个处于计划阶段的 JEP:让其支持 TLS 1.3

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> JDK 11 最近有什么消息&#xff1f;我们不妨来看一下它的进展情况&#xff0c;包括最新的 JEP 提案。Java 的新版本发布计划意味着总会有一款新的 JDK 即将推出。根据他们的计划&a…

498. 对角线遍历

498. 对角线遍历 给定一个含有 M x N 个元素的矩阵&#xff08;M 行&#xff0c;N 列&#xff09;&#xff0c;请以对角线遍历的顺序返回这个矩阵中的所有元素&#xff0c;对角线遍历如下图所示。 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5…

软件测试测试用例编写_不要先编写所有软件测试-只需编写一个

软件测试测试用例编写Test Driven Development (TDD) is sometimes described as “writing tests first”. The TDD mantra states that we should not write code before we have written automated tests that exercise that code. Writing code first is considered subopt…

练习五

1.团队模式和团队的开发模式有什么关系&#xff1f; 答&#xff1a; 首先我来解释一下这两个名词&#xff1a; 我查资料了解了一下&#xff0c;团队模式&#xff0c;更偏向于多人合作的那种&#xff0c;而且我理解的“团队”会是一种多人合作的情况下&#xff0c;长期磨合后的一…