1266.訪問所有點的最小時間
題目描述:
平面上有 n 個點,點的位置用整數座標表示 points[i] = [xi, yi]。請你計算訪問所有這些點需要的最小時間(以秒爲單位)。
你可以按照下面的規則在平面上移動:
每一秒沿水平或者豎直方向移動一個單位長度,或者跨過對角線(可以看作在一秒內向水平和豎直方向各移動一個單位長度)。
必須按照數組中出現的順序來訪問這些點。
示例 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.length == n
1 <= n <= 100
points[i].length == 2
-1000 <= points[i][0], points[i][1] <= 1000
題解:
觀察示例1,可以發現從[1,1]到[3,4]所需時間爲max(3-1,4-1)=3,同理可得從[3,4]到[-1,0]所需時間爲max(3-(-1),4-0)=4,因此可得從一點到另一點的時間爲兩點橫座標差值絕對值與縱座標差值絕對值中較大者
class Solution {
public int minTimeToVisitAllPoints(int[][] points) {
//統計時間
int time=0;
for(int i=0;i<points.length-1;i++){
//座標X的差值絕對值
int X = Math.abs(points[i+1][0]-points[i][0]);
//座標Y的差值絕對值
int Y = Math.abs(points[i+1][1]-points[i][1]);
time+=(X>=Y)?X:Y;
}
return time;
}
}