789. 逃脫阻礙者
你在進行一個簡化版的吃豆人游戲。你從 (0, 0) 點開始出發,你的目的地是 (target[0], target[1]) 。地圖上有一些阻礙者,第 i 個阻礙者從 (ghosts[i][0], ghosts[i][1]) 出發。
每一回合,你和阻礙者們可以同時向東,西,南,北四個方向移動,每次可以移動到距離原位置1個單位的新位置。
如果你可以在任何阻礙者抓住你之前到達目的地(阻礙者可以采取任意行動方式),則被視為逃脫成功。如果你和阻礙者同時到達了一個位置(包括目的地)都不算是逃脫成功。
當且僅當你有可能成功逃脫時,輸出 True。
示例 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
解釋:
阻礙者可以和你同時達到目的地。
說明:
所有的點的坐標值的絕對值 <= 10000。
阻礙者的數量不會超過 100。
PS:
這個題表達的意思是,想進一切辦法,比其他人先到終點,或者讓其他人走過終點,
他是重復你走的方向,所以只需要判斷一下曼哈頓距離(就是表示兩個點在標准坐標系上的絕對軸距之和)就好了,有不懂的歡迎評論
class Solution {
public boolean escapeGhosts(int[][] ghosts, int[] target) {
int[] source = new int[]{0, 0};
for (int[] ghost: ghosts)
if (taxi(ghost, target) <= taxi(source, target))
return false;
return true;
}
public int taxi(int[] P, int[] Q) {
return Math.abs(P[0] - Q[0]) + Math.abs(P[1] - Q[1]);
}
}
PS:注意 最后 送大家一套2020最新Java架構實戰教程+大廠面試題庫, 點擊此處 進來獲取 一起交流進步哦!