平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。
你可以按照下面的规则在平面上移动:
每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。
必须按照数组中出现的顺序来访问这些点。
解:由于每秒可以走一次对角线,一步的总时间相当于两点之间横坐标之差和纵坐标之差的最大值:
class Solution {
public:
int minTimeToVisitAllPoints(vector<vector<int>>& points) {
int sz = points.size();
if (sz == 0 || sz == 1) {
return 0;
}
int res = 0;
for (int i = 1; i < sz; ++i) {
int dy = abs(points[i][1] - points[i - 1][1]);
int dx = abs(points[i][0] - points[i - 1][0]);
res += max(dx, dy);
}
return res;
}
};