https://leetcode.com/problems/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.app
You can move according to the next rules:函數
翻譯:給定一個平面,有n個點,座標表示爲 [xi,yi],你須要求出一個最小的訪問時間,你的訪問方式必須是以順序去訪問全部的點。每一秒鐘你能夠水平或者垂直移動一步或者對角移動一步。spa
此圖就是原題的一個示例:翻譯
Input : points = [[1,1],[3,4],[-1,0]]code
output :7 leetcode
由於 :[1,1] -> [2,2] -> [3,3] -> [3,4] -> [2,3] -> [1,2] -> [0,1] -> [-1,0]get
這種簡單的最小路徑的算法題,思路有不少,最簡單的就是貪心算法,由於最無腦。it
咱們都知道,對角的一步比水平或者垂直移動的一步都要遠,因此咱們要儘可能先走對角,而後實在沒有辦法的時候再普通的走一步。io
那麼算法就很明瞭了:
class Solution {
public:
int minTimeToVisitAllPoints(vector<vector<int>>& points) {
int ans = 0; //距離的絕對值
for(int i = 1; i < points.size(); i++) {
ans += max(abs(points[i][1] - points[i - 1][1]), abs(points[i][0] - points[i - 1][0])); //求出發點和目的點的xy值的差,好比例子裏,x爲3-1=2,y爲4-1=3。這兩個值相同的部分(2) 就是對角的步數,多出來的(1)就是水平或者垂直的移動,所以咱們取二者的最大值3,是本次的距離。
}
return ans;
}
};
sub:這裏要注意就是 「points.size()」 這個是vector的一個成員函數 .size()其返回的是unsighed int,因此注意不要越界。