题目链接:
切比雪夫距离
对于平面上的两个点 x = ( x 0 , x 1 ) x = (x_0, x_1) x=(x0,x1) 和 y = ( y 0 , y 1 ) y = (y_0, y_1) y=(y0,y1),设它们横坐标距离之差为 d x = ∣ x 0 − y 0 ∣ dx = |x_0 - y_0| dx=∣x0−y0∣,纵坐标距离之差为 d y = ∣ x 1 − y 1 ∣ dy = |x_1 - y_1| dy=∣x1−y1∣,对于以下三种情况,我们可以分别计算出从 x x x 移动到 y y y 的最少次数:
- d x < d y dx < dy dx<dy:沿对角线移动 d x dx dx 次,再竖直移动 d y − d x dy - dx dy−dx 次,总计 d x + ( d y − d x ) = d y dx + (dy - dx) = dy dx+(dy−dx)=dy 次;
- d x = = d y dx == dy dx==dy:沿对角线移动 d x dx dx 次
- d x > d y dx > dy dx>dy:沿对角线移动 d y dy dy 次,再竖直移动 d x − d y dx - dy dx−dy 次,总计 d y + ( d x − d y ) = d x dy + (dx - dy) = dx dy+(dx−dy)=dx 次
可以发现,对于任意一种情况,从 x x x 移动到 y y y 的最少次数为 d x dx dx 和 d y dy dy 中的较大值 m a x ( d x , d y ) \rm max(dx, dy) max(dx,dy),这也被称作 x x x 和 y y y 之间的切比雪夫距离。
class Solution {
public:
int minTimeToVisitAllPoints(vector<vector<int>>& points) {
int x0 = points[0][0], x1 = points[0][1];
int ans = 0;
for (int i = 1; i < points.size(); i++) {
int y0 = points[i][0], y1 = points[i][1];
ans += max(abs(x0 - y0), abs(x1 - y1));
x0 = y0;
x1 = y1;
}
return ans;
}
};