LeetCode之1266. 訪問所有點的最小時間

概要

題目來源鏈接:https://leetcode-cn.com/problems/minimum-time-visiting-all-points/

難度:簡單

類型:數組

題目

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

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

每一秒沿水平或者豎直方向移動一個單位長度,或者跨過對角線(可以看作在一秒內向水平和豎直方向各移動一個單位長度)。
必須按照數組中出現的順序來訪問這些點。

示例

示例1圖:

示例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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-time-visiting-all-points
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

分析

points = [[1,1],[3,4],[-1,0]]以此爲例

從 [1,1] 到 [3,4] 需要 3 秒,那麼這個3可以這麼計算出來呢?|1-3|的絕對值等於2,|1-4|的絕對值等於3,那麼取絕對值大的3即爲最小時間。

同理,從 [3,4] 到 [-1,0] 需要 4 秒,|3-(-1)|的絕對值等於4,|4-0|的絕對值也等於4,那麼任取一個4都可以。

然後3+4=7即爲最小時間。

代碼

    /**
     * 訪問所有點的最小時間
     *
     * @param points 結點數組
     * @return 返回最小時間(以秒爲單位)
     */
    public int minTimeToVisitAllPoints(int[][] points) {
        int time = 0;// 計時器,記錄最小時間
        for (int i = 0; i < points.length - 1; i++) {// 遍歷二維數組
            for (int j = 0; j < points[i].length - 1; j++) {
                int t1 = points[i][j] - points[i + 1][j];// 記錄二維數組第i行j列的元素減去第i+1行第j的元素的值
                int t2 = points[i][j + 1] - points[i + 1][j + 1];// 記錄二維數組第i行j+1列的元素減去第i+1行第j+1的元素的值
                if (abs(t1) > abs(t2)) {// 比較二者的絕對值,取絕對值大的作爲時間,如果相等,任取其一
                    time += abs(t1);
                } else if (abs(t1) < abs(t2)) {
                    time += abs(t2);
                } else if (abs(t1) == abs(t2)) {
                    time += abs(t1);
                }
            }
        }
        return time;
    }

    /**
     * 求一個數的絕對值
     * @param x 數
     * @return 返回絕對值
     */
    public int abs(int x) {
        if (x < 0) {
            return -x;
        } else {
            return x;
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章