10 Minimum Time Visiting All Points

題目

On a plane there are n points with integer coordinates points[i] = [xi, yi]. Your task is to find the minimum time in seconds to visit all points.

You can move according to the next rules:

In one second always you can either move vertically, horizontally by one unit or diagonally (it means to move one unit vertically and one unit horizontally in one second).
You have to visit the points in the same order as they appear in the array.

Example 1:
在這裏插入圖片描述

Input: points = [[1,1],[3,4],[-1,0]]
Output: 7
Explanation: One optimal path is [1,1] -> [2,2] -> [3,3] -> [3,4] -> [2,3] -> [1,2] -> [0,1] -> [-1,0]
Time from [1,1] to [3,4] = 3 seconds
Time from [3,4] to [-1,0] = 4 seconds
Total time = 7 seconds

Example 2:

Input: points = [[3,2],[-2,2]]
Output: 5

Constraints:

points.length == n
1 <= n <= 100
points[i].length == 2
-1000 <= points[i][0], points[i][1] <= 1000

分析

題意:給定n個點,按n個點出現的順序,將點(x,y)進行水平(x±1)、垂直(y±)或對角移動一個單位(x±1,y±1),求出遍歷n個點所需要的單位量。

初步分析算法:sum(max(( |x[i+1]-x[i]| ),( |y[i+1]-y[i]| ))),i∈(0,1,2…)

求出點i前後的x、y座標差的絕對值,取最大值,並將所有兩點求出的該最大值累加;

如:points = [[3,2],[-2,2]])
|3-(-2)|=5
|2-2|=0
因此result=max(5,0)=5

但是如果按上述方法,二維數組的操縱比較麻煩,我還是看看評論區答案。

發現評論區的算法跟上面所述算法一樣,博主對Java二維數組的操縱比較不熟悉,答案後面會對二維數組的操縱進行總結。

解答

class Solution {
    public int minTimeToVisitAllPoints(int[][] points) {
        int ans = 0;
        for (int i = 1; i < points.length; ++i) {
            int[] cur = points[i], prev = points[i - 1];
            ans += Math.max(Math.abs(cur[0] - prev[0]), Math.abs(cur[1] - prev[1]));
        }
        return ans;        
    }
}
  1. points.length=第一維度的長度(即點的個數)
  2. points[i]是一個點,實際包含x,y兩個數據
  3. 然後訪問x點:cur[0],y點cur[1]
發佈了78 篇原創文章 · 獲贊 15 · 訪問量 5233
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章