平面上有 n 個點,點的位置用整數座標表示 points[i] = [xi, yi]。請你計算訪問所有這些點需要的最小時間(以秒為單位)。你可以按照下面的規則在平面上移動:每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線(可以看作在一秒內向水平和豎直方向各移動乙個單位長度)。必須按照陣列**現的順序來訪問這些點。
address
思路:對於平面上兩個點x=(x0, x1)和y=(y0, y1),設橫座標距離之差為dx,縱座標距離之差為dy.
有三種情況來計算從x到y的最小次數
dx < dy 沿對角線移動dx次,豎直移動dy-dx次,一共dy次
dx = dy 沿對角線移動dx次
dx > dy 沿對角線移動dy次,水平移動dx-dy次,一共dy次
可以發現,對於任意一種情況,從 x 移動到 y 的最少次數為 dx 和 dy 中的較大值max(dx, dy),這也被稱作 x 和 y 之間的 切比雪夫距離。
由於題目要求,需要按照陣列**現的順序來訪問這些點。因此我們遍歷整個陣列,對於陣列中的相鄰兩個點,計算出它們的切比雪夫距離,所有的距離之和即為答案。
from typing import list
defmin_time_to_visit_all_points
(points: list[list[
int]])
->
int:
x0, x1 = points[0]
ans =
0for i in
range(1
,len
(points)):
y0, y1 = points[i]
ans +=
max(
abs(x0 - y0)
,abs
((x1 - y1)))
x0, x1 = points[i]
return ans
if __name__ ==
'__main__'
: points =[[
1,1]
,[3,
4],[
-1,0
]]print
(min_time_to_visit_all_points(points)
)
訪問所有點的最小時間
平面上有 n 個點,點的位置用整數座標表示 points i xi,yi 請你計算訪問所有這些點需要的最小時間 以秒為單位 你可以按照下面的規則在平面上移動 每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線 可以看作在一秒內向水平和豎直方向各移動乙個單位長度 必須按照陣列 現的順序來訪問這些...
1266 訪問所有點的最小時間
package com.leetcode.easy 1266.訪問所有點的最小時間 平面上有 n 個點,點的位置用整數座標表示 points i xi,yi 請你計算訪問所有這些點需要的最小時間 以秒為單位 你可以按照下面的規則在平面上移動 每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線 ...
1266 訪問所有點的最小時間
對於平面上的兩個點 x x0,x1 和 y y0,y1 設它們橫座標距離之差為 dx x0 y0 縱座標距離之差為 dy x1 y1 對於以下三種情況,我們可以分別計算出從 x 移動到 y 的最少次數 dx dy 沿對角線移動 dx 次,再豎直移動 dy dx 次,總計 dx dy dx dy 次 ...