1266 訪問所有點的最小時間(分析)

2021-10-07 12:13:37 字數 1556 閱讀 1637

1. 問題描述:

平面上有 n 個點,點的位置用整數座標表示 points[i] = [xi, yi]。請你計算訪問所有這些點需要的最小時間(以秒為單位)。

你可以按照下面的規則在平面上移動:

每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線(可以看作在一秒內向水平和豎直方向各移動乙個單位長度)。

必須按照陣列**現的順序來訪問這些點。

示例 1:

2. 思路分析:

① 首先需要讀懂題目,需要注意題目中要求的兩個點,第乙個點是我們需要從給定點的順序乙個個進行到達,第二個點是每一次只能夠走對角線、水平、垂直方向,注意這兩個點之後,關鍵是需要找出其中的規律即可,從題目中的圖可以發現,假如兩個點是可以直接到達的可以分為三種情況:

1)正方形的對角線,這個時候我們可以判斷出兩個點之間的橫座標與縱座標之間的距離是否相等來判斷是否是正方形的對角線

2)兩個點在同一水平線上,直接求解出兩個點的橫座標的差值即可

3)兩個點在同一垂直線上,直接求解出兩個點的縱座標的差值即可

② 上面的都是屬於兩個點可以直接到達的情況,我們只需要求解出其中的差值即可,除此之外屬於不能夠直接到達的情況,為兩個點的連線不是正方形的對角線而是矩形對角線,這個時候我們需要求解出兩個點的橫座標與縱座標的最大取值即可,使用兩個變數x,y來更新到達了當前的點了

3. **如下:

from typing import list

class solution:

def mintimetovisitallpoints(self, points: list[list[int]]) -> int:

# 其實這道題目就是在找出對應的規律

x, y = points[0][0], points[0][1]

res = 0

for point in points:

# 先判斷哼座標與縱座標的絕對值是否相等假如相等那麼屬於正方形的對角線

if abs(x - point[0]) == abs(y - point[1]): # 說明是可以直接到達的

res += abs(x - point[0])

# 屬於同一垂直線上

elif abs(x - point[0]) == 0:

res += abs(y - point[1])

# 屬於同一水平線上

elif abs(y - point[1]) == 0:

res += abs(x - point[0])

else:

# 矩形對角線可以求解出橫縱座標的最大值即可

res += max(abs(x - point[0]), abs(y - point[1]))

x, y = point[0], point[1]

return res

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 次 ...

力扣 1266 訪問所有點的最小時間 C

平面上有 n 個點,點的位置用整數座標表示 points i xi,yi 請你計算訪問所有這些點需要的最小時間 以秒為單位 你可以按照下面的規則在平面上移動 每一秒沿水平或者豎直方向移動乙個單位長度,或者跨過對角線 可以看作在一秒內向水平和豎直方向各移動乙個單位長度 必須按照陣列 現的順序來訪問這些...