日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

789. 逃脱阻碍者

發布時間:2023/11/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

解題思路

曼哈頓距離——兩點在南北方向上的距離加上在東西方向上的距離,即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;} }

總結

以上是生活随笔為你收集整理的789. 逃脱阻碍者的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。