1266.访问所有点的最小时间

题目链接:

切比雪夫距离

对于平面上的两个点 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=x0y0,纵坐标距离之差为 d y = ∣ x 1 − y 1 ∣ dy = |x_1 - y_1| dy=x1y1,对于以下三种情况,我们可以分别计算出从 x x x 移动到 y y y 的最少次数:

  • d x < d y dx < dy dx<dy:沿对角线移动 d x dx dx 次,再竖直移动 d y − d x dy - dx dydx 次,总计 d x + ( d y − d x ) = d y dx + (dy - dx) = dy dx+(dydx)=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 dxdy 次,总计 d y + ( d x − d y ) = d x dy + (dx - dy) = dx dy+(dxdy)=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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值