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

更新於 2024/11/07閱讀時間約 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

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的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
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近有遇到轉職失敗的案子,其實我也很常面試失敗,但有時候不是你的問題。 在現代快速變化的職場中,感到一時迷茫是很正常的。 如果你也正站在人生的十字路口,不確定下一步該怎麼走,別急, 我們來一起利用下面6點來解清這個狀況。 1. 回歸自我 首先,停下來,深呼吸,然後問問自己:我真正想要什
Thumbnail
題目敘述 題目會給定一個整數陣列arr,要求我們判斷是否每個元素的出現次數都不同? 題目的原文敘述 測試範例 Example 1: Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurre
Thumbnail
題目敘述 題目會給我們一張資料表Triangle。 裡面分別有x、 y、z等欄位,分別代表三個邊長。其中(x、 y、z)做為複合主鍵Primary key 要求我們判斷,每條data row裡面的x, y, z 能否構成一個合法的三角形? 如果可以,返回字串"Yes";如果不行,返回字串"No
Thumbnail
題目會給定我們兩個點座標,分別是起點和終點。 另外,還有一個參數t,代表時間限制。 從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點,不能停留在原地) 請問我們能不能在時間限制內,從起點走到終點?
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
建議大家試試這方法,更了解妳的心意,也更清楚對方是什麼樣的人。
這時事是古人的智慧,也是朝三暮四這句成語的由來。 因此朝四之後,過了中午,接續給暮三,也沒人會在意。 畢竟可以稍微撼動制度,對某些小孩來說,就已心滿意足。 而看穿這一切而穩如泰山的兒童,可能要教導演技,避免早熟的不合群帶來霸凌。
Thumbnail
我們都知道所謂的"勞工"都會和公司簽署"勞動契約"來約定彼此之間的勞雇關係,並且受到勞基法的規範。 但隨著公司經營的擴大,不同的業務需求越來越多時,公司和提供勞務者的關係就不一定是簽署"勞動契約"。 舉凡像是企業內的高階經理人(副總經理、分店店長),通常會與公司簽屬委任契約、還有像是按件計酬的勞務工
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近有遇到轉職失敗的案子,其實我也很常面試失敗,但有時候不是你的問題。 在現代快速變化的職場中,感到一時迷茫是很正常的。 如果你也正站在人生的十字路口,不確定下一步該怎麼走,別急, 我們來一起利用下面6點來解清這個狀況。 1. 回歸自我 首先,停下來,深呼吸,然後問問自己:我真正想要什
Thumbnail
題目敘述 題目會給定一個整數陣列arr,要求我們判斷是否每個元素的出現次數都不同? 題目的原文敘述 測試範例 Example 1: Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurre
Thumbnail
題目敘述 題目會給我們一張資料表Triangle。 裡面分別有x、 y、z等欄位,分別代表三個邊長。其中(x、 y、z)做為複合主鍵Primary key 要求我們判斷,每條data row裡面的x, y, z 能否構成一個合法的三角形? 如果可以,返回字串"Yes";如果不行,返回字串"No
Thumbnail
題目會給定我們兩個點座標,分別是起點和終點。 另外,還有一個參數t,代表時間限制。 從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點,不能停留在原地) 請問我們能不能在時間限制內,從起點走到終點?
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
Thumbnail
如果是孽缘的感情,如何判断,这辈子怎么还没还完债? 学生的这个问题还是挺有意思的,这里需要分三层去理解: 第一层是本性选择,第二层是人道选择,第三层是天道选择。 1.本性选择 本性选择,顾名思义、很好理解,就是喜欢就喜欢,不喜欢就不喜欢,都随着自己的性子去做决定,大部分的人都这样,心智越年轻
建議大家試試這方法,更了解妳的心意,也更清楚對方是什麼樣的人。
這時事是古人的智慧,也是朝三暮四這句成語的由來。 因此朝四之後,過了中午,接續給暮三,也沒人會在意。 畢竟可以稍微撼動制度,對某些小孩來說,就已心滿意足。 而看穿這一切而穩如泰山的兒童,可能要教導演技,避免早熟的不合群帶來霸凌。
Thumbnail
我們都知道所謂的"勞工"都會和公司簽署"勞動契約"來約定彼此之間的勞雇關係,並且受到勞基法的規範。 但隨著公司經營的擴大,不同的業務需求越來越多時,公司和提供勞務者的關係就不一定是簽署"勞動契約"。 舉凡像是企業內的高階經理人(副總經理、分店店長),通常會與公司簽屬委任契約、還有像是按件計酬的勞務工