根据题意,需要依次求出两个相邻点之间要花费的时间。
设两个相邻点为A,B。
m = |Ax - Bx| 为两点横坐标之间距离。
n = |Ay - By| 为两点纵坐标之间距离。
因为横向和竖向移动一个单位消耗时间为1s,斜向移动sqrt(2)距离消耗时间也为1s,
则在移动过程中优先采取斜向路线,从A先移动到与B横坐标或纵坐标相同的位置,之后再横向或竖向移动。
所消耗总时间为m 或 n的最大值。
class Solution {
public:
int minTimeToVisitAllPoints(vector<vector<int>>& points) {
int time(0), m, n;
if(points.size() == 1)
return 0;
vector<vector<int>>::iterator it1(points.begin());
vector<vector<int>>::iterator it2(points.begin()+1);
while(it2 != points.end())
{
m = abs((*it1)[0] - (*it2)[0]);
n = abs((*it1)[1] - (*it2)[1]);
time += m > n ? m : n;
it1++;
it2++;
}
return time;
}
};