友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
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 解释:阻碍者可以和你同时达到目的地。
提示:
-
1 <= ghosts.length <= 100 -
ghosts[i].length == 2 -
-104 <= xi, yi <= 104 -
同一位置可能有 多个阻碍者 。
-
target.length == 2 -
-104 <= xtarget, ytarget <= 104
思路分析
题目看着很虎,实际很简单:就是检查一下是否存在阻碍者到终点距离比起点到终点的距离更短?
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-06-22 20:46:27
*/
public boolean escapeGhosts(int[][] ghosts, int[] target) {
int[] source = {0, 0};
int distance = manhattanDistance(source, target);
for (int[] ghost : ghosts) {
if (manhattanDistance(ghost, target) <= distance) {
return false;
}
}
return true;
}
private int manhattanDistance(int[] source, int[] target) {
return Math.abs(target[0] - source[0]) + Math.abs(target[1] - source[1]);
}

