判斷是否能在時間限制內抵達終點 Leetcode #2849

閱讀時間約 4 分鐘
raw-image

這題的題目在這裡:Determine if a Cell Is Reachable at a Given Time

題目敘述

題目會給定我們兩個點座標,分別是起點和終點。

另外,還有一個參數t,代表時間限制。

從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點不能停留在原地)

註:
N8 8連通代表可以往東、南、西、北、東北、西北、東南、西南 選一個方向移動一格。

請問我們能不能在時間限制內,從起點走到終點?


測試範例

Example 1:

Input: sx = 2, sy = 4, fx = 7, fy = 7, t = 6
Output: true
Explanation: Starting at cell (2, 4), we can reach cell (7, 7) in exactly 6 seconds by going through the cells depicted in the picture above.

Example 2:

Input: sx = 3, sy = 1, fx = 7, fy = 3, t = 3
Output: false
Explanation: Starting at cell (3, 1), it takes at least 4 seconds to reach cell (7, 3) by going through the cells depicted in the picture above. Hence, we cannot reach cell (7, 3) at the third second.

約束條件

Constraints:

  • 1 <= sx, sy, fx, fy <= 10^9
  • 0 <= t <= 10^9

演算法

除了傳統的BFS + N8的路徑模擬演算法以外,其實,還可以使用Chebyshev distance來進行估計。

Chebyshev distance的定義就是兩個點座標,假設都沒有障礙物,在平面上N8 8連通走法的最短距離。

Chebyshev distance(x, y) = Max{ |x1-x2|, |y1-y2|}

從起點的視角來看,就像一個方形的同心紋路,一層一層,由內往外擴散

raw-image

因為,每一秒鐘移動一步,所以,假如兩點的Chebyshev distance <= 限制t

則代表,從起點出發,用N8 8連通的走法,可以在時間限制t內抵達終點。


唯一有一個例外,要特別小心,當起點等於終點,而且t=1時,反而無法抵達,為什麼?

題目有特別強調,每一秒必須強制移動到下一個格子點不能停留在原地

所以,當起點等於終點,而且t=1時,必須return False


程式碼

class Solution:
 def isReachableAtTime(self, sx: int, sy: int, fx: int, fy: int, t: int) -> bool:
  
  if sx == fx and sy == fy and t == 1:
   # Special case:
   # Each second, we must move one step
   return False

  # Optimal path's length = Chebyshev distance
  chebyshev_dist = max( abs(sx-fx), abs(sy-fy) )

  return chebyshev_dist <= t

複雜度分析

時間複雜度:

O(1) 使用Chebyshev distance估計,常數時間內可以計算出來。

空間複雜度:

O(1) 使用到的都是固定尺寸的臨時變數,為常數級別。


關鍵知識點

除了傳統的BFS + N8的路徑模擬演算法以外,其實,還可以使用Chebyshev distance來進行估計。

Chebyshev distance的定義就是兩個點座標,假設都沒有障礙物,在平面上N8 8連通走法的最短距離。

Chebyshev distance(x, y) = Max{ |x1-x2|, |y1-y2|}

從起點的視角來看,就像一個方形的同心紋路,一層一層,由內往外擴散。


Reference:

[1] Python O(1) by Chebyshev distance [+ Visualization] - Determine if a Cell Is Reachable at a Given Time - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目的輸入會給我們一個串列,要求我們從頭到尾反轉整個串列。 例子: 如果輸入是1 -> 2 -> 3,那麼輸出就是 3 -> 2 -> 1
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目的輸入會給我們一個串列,要求我們從頭到尾反轉整個串列。 例子: 如果輸入是1 -> 2 -> 3,那麼輸出就是 3 -> 2 -> 1
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
建議大家試試這方法,更了解妳的心意,也更清楚對方是什麼樣的人。
這時事是古人的智慧,也是朝三暮四這句成語的由來。 因此朝四之後,過了中午,接續給暮三,也沒人會在意。 畢竟可以稍微撼動制度,對某些小孩來說,就已心滿意足。 而看穿這一切而穩如泰山的兒童,可能要教導演技,避免早熟的不合群帶來霸凌。
Thumbnail
我們都知道所謂的"勞工"都會和公司簽署"勞動契約"來約定彼此之間的勞雇關係,並且受到勞基法的規範。 但隨著公司經營的擴大,不同的業務需求越來越多時,公司和提供勞務者的關係就不一定是簽署"勞動契約"。 舉凡像是企業內的高階經理人(副總經理、分店店長),通常會與公司簽屬委任契約、還有像是按件計酬的勞務工
Thumbnail
轉職季、畢業季,相信有很多人為了未來職涯苦惱著,或者已經開始找尋自己想去的職位。但每當通知信到來時,猶豫該不該去這間公司呢? 「不知道公司給的福利好不好?」 「會不會被公司裡的老鳥排擠,而待不久?」 「跟想像中的不一樣,該怎麼辦?」 撿石頭的順序從原本大的→更大→一無所獲 選擇方法❷ 學習的機會
Thumbnail
這篇文章要分享五大重點: 一、導致憂鬱症的原因 二、8個憂鬱症前兆 三、如何預防憂鬱症 四、輕微憂鬱解決辦法 五、台灣心理諮商電話 如果你喜歡這篇文章,可以拍手、留言讓我知道,謝謝你的支持。 上周莫名其妙我有點小憂鬱,連續好幾天,對任何事都提不起勁來,連平常很有興趣的事情也沒動力去做。正在看這篇文章
複利先生您好 因緣際會下發現Reits這個金融商品 參考網站 如下  https://richjamie.blogspot.com/2019/08/reits.html 發現裡面的MAC 與 KIM 這兩隻Reits 都跌到相對低點,殖利率看起來也不錯
Thumbnail
說起小兒多動癥,各位家長應該不會陌生。家裏有個小兒多動癥的孩子,簡直讓家長苦不堪言。如何知道自己的小孩是單純的好動還是小兒多動癥?接下來,各位家長試著回答這3個問題便會有答案。   問題壹:妳的小孩是否長期註意力無法集中?   如果妳發現自己的孩子註意持久液長期無法有效集中,有以下的情況
Thumbnail
股市的運作就是商業手法極致的表現,只是牽涉的利益更龐大,操作的手法更細膩,人性心理的運用更極致,一般人進到夜市或百貨公司都可能暫時迷失而比預期多花一點錢,更何況是進到運作更精細的股市?
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
建議大家試試這方法,更了解妳的心意,也更清楚對方是什麼樣的人。
這時事是古人的智慧,也是朝三暮四這句成語的由來。 因此朝四之後,過了中午,接續給暮三,也沒人會在意。 畢竟可以稍微撼動制度,對某些小孩來說,就已心滿意足。 而看穿這一切而穩如泰山的兒童,可能要教導演技,避免早熟的不合群帶來霸凌。
Thumbnail
我們都知道所謂的"勞工"都會和公司簽署"勞動契約"來約定彼此之間的勞雇關係,並且受到勞基法的規範。 但隨著公司經營的擴大,不同的業務需求越來越多時,公司和提供勞務者的關係就不一定是簽署"勞動契約"。 舉凡像是企業內的高階經理人(副總經理、分店店長),通常會與公司簽屬委任契約、還有像是按件計酬的勞務工
Thumbnail
轉職季、畢業季,相信有很多人為了未來職涯苦惱著,或者已經開始找尋自己想去的職位。但每當通知信到來時,猶豫該不該去這間公司呢? 「不知道公司給的福利好不好?」 「會不會被公司裡的老鳥排擠,而待不久?」 「跟想像中的不一樣,該怎麼辦?」 撿石頭的順序從原本大的→更大→一無所獲 選擇方法❷ 學習的機會
Thumbnail
這篇文章要分享五大重點: 一、導致憂鬱症的原因 二、8個憂鬱症前兆 三、如何預防憂鬱症 四、輕微憂鬱解決辦法 五、台灣心理諮商電話 如果你喜歡這篇文章,可以拍手、留言讓我知道,謝謝你的支持。 上周莫名其妙我有點小憂鬱,連續好幾天,對任何事都提不起勁來,連平常很有興趣的事情也沒動力去做。正在看這篇文章
複利先生您好 因緣際會下發現Reits這個金融商品 參考網站 如下  https://richjamie.blogspot.com/2019/08/reits.html 發現裡面的MAC 與 KIM 這兩隻Reits 都跌到相對低點,殖利率看起來也不錯
Thumbnail
說起小兒多動癥,各位家長應該不會陌生。家裏有個小兒多動癥的孩子,簡直讓家長苦不堪言。如何知道自己的小孩是單純的好動還是小兒多動癥?接下來,各位家長試著回答這3個問題便會有答案。   問題壹:妳的小孩是否長期註意力無法集中?   如果妳發現自己的孩子註意持久液長期無法有效集中,有以下的情況
Thumbnail
股市的運作就是商業手法極致的表現,只是牽涉的利益更龐大,操作的手法更細膩,人性心理的運用更極致,一般人進到夜市或百貨公司都可能暫時迷失而比預期多花一點錢,更何況是進到運作更精細的股市?