前往
大廳
主題

LeetCode - 1266. Minimum Time Visiting All Points 解題心得

Not In My Back Yard | 2021-04-11 00:00:12 | 巴幣 0 | 人氣 277

題目連結:


題目意譯:
在一個 2D 平面上,存在 n 個有著整數座標的點 points[i] = [xi, yi]。回傳依照給定的順序走過每個點所需的最少時間。

你可以根據下列規則移動:
在一秒內,你可以:
垂直地移動一單位長、
水平地移動一單位長,或是
對角線地移動 sqrt(2) 單位長(換句話說,一秒中垂直移動一單位然後水平移動一單位)。

你需要以在陣列中出現的相同順序造訪所有點。

你被允許經過之後的順序才會出現的點,但那些不算作在造訪之內。

限制:
points.length == n
1 ≦ n ≦ 100
points[i].length == 2
-1000 ≦ points[i][0] 、 points[i][1] ≦ 1000



範例測資:
範例 1:
輸入: points = [[1,1],[3,4],[-1,0]]
輸出: 7
解釋: 一條最佳路徑為 [1,1] → [2,2] → [3,3] → [3,4] → [2,3] → [1,2] → [0,1] → [-1,0]
從 [1, 1] 到 [3, 4] 的時間 = 3 秒
從 [3, 4] 到 [-1, 0] 的時間 = 4 秒
總時間 = 7 秒。

範例 2:
輸入: points = [[3,2],[-2,2]]
輸出: 5


解題思維:
掃過 points 陣列,對於每個給定順序中相鄰的點 points[i] 與 points[i - 1],將其最佳走法所需的秒數全部相加即是所求。

假設兩點的 x 座標差為 dx , y 座標差為 dy。而每兩個點之間的最佳走法即是走盡可能多次的對角線(因為可以同時在 x 方向以及 y 方向移動),剩下步數再補足剩下的位置差異。因此走對角線的次數為 min(dx, dy) = D,剩下的步數為 max(dx, dy) - D。因此最佳步數所花的秒數為
D + (max(dx, dy) - D)
max(dx, dy)




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作