Java實現 LeetCode 789 逃脫阻礙者(曼哈頓距離)


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架構實戰教程+大廠面試題庫, 點擊此處 進來獲取 一起交流進步哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM