leetcode訪問所有點的最小時間 1266

2021-10-08 22:59:43 字數 1244 閱讀 9990

平面上有 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 次 ...