C++ 中訪問所有點的最短時間


假設已給定一個數組中的一些點。我們必須找到秒數內所有點的訪問的最短時間。有以下一些條件。

  • 在一秒內,它可以垂直、水平和對角移動
  • 我們必須按它們在陣列中出現的順序訪問這些點。

因此,如果這些點是 [(1,1), (3,4), (-1,0)],則輸出將為 7。如果我們檢查最短路徑的順序,該順序將是 (1,1)、(2,2)、(3,3)、(3,4)、(2,3)、(1,2)、(0,1)、(-1,0)

為了解決這個問題,我們將僅找出兩個連續點的 x 座標差的最大值和兩個連續點的 y 座標差。將新增最大值。

示例

讓我們參見以下實現以更好地理解 −

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
      int minTimeToVisitAllPoints(vector<vector<int>>& p) {
         int ans = 0;
         int n = p.size();
         for(int i = 1; i < n; i++){
            ans += max(abs(p[i][0] - p[i-1][0]), abs(p[i][1] - p[i-1] [1]));
         }
         return ans;
      }
};
main(){
   Solution ob;
   vector<vector<int>> c = {{1,1},{3,4},{-1,0}};
   cout << ob.minTimeToVisitAllPoints(c);
}

輸入

[[1,1],[3,4],[-1,0]]

輸出

7

更新於: 2020年4月29日

173 次瀏覽

開啟你的 事業

完成課程以獲得認證

開始
廣告