曼哈顿距离转化为切比雪夫距离

1 介绍

本专题介绍曼哈顿距离如何转化为切比雪夫距离。

A点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)和B点 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)的曼哈顿距离定义为它们的坐标差绝对值之和,即
∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ |x_1-x_2|+|y_1-y_2| x1x2+y1y2

构建投影, ( x ′ , y ′ ) = ( x + y , y − x ) (x',y')=(x+y,y-x) (x,y)=(x+y,yx),有
∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ = m a x ( ∣ x 1 ′ − x 2 ′ ∣ , ∣ y 1 ′ − y 2 ′ ∣ ) |x_1-x_2|+|y_1-y_2|=max(|x'_1-x'_2|,|y'_1-y'_2|) x1x2+y1y2=max(x1x2,y1y2)
其中上式左边为曼哈顿距离,右边为切比雪夫距离。

2 训练

题目1100240最小化曼哈顿距离

C++代码如下,

class Solution {
public:
    int minimumDistance(vector<vector<int>>& points) {
        int n = points.size();
        multiset<int> sx, sy;

        for (int i = 0; i < n; ++i) {
            int x = points[i][0], y = points[i][1];
            sx.insert(x + y);
            sy.insert(y - x);
        }

        int res = INT_MAX;

        for (int i = 0; i < n; ++i) {
            int x = points[i][0], y = points[i][1];

            sx.extract(x + y);
            sy.extract(y - x);

            int a = *sx.rbegin() - *sx.begin();
            int b = *sy.rbegin() - *sy.begin();
            int t = max(a, b);
            res = min(res, t);

            sx.insert(x + y);
            sy.insert(y - x);
        }
        return res;
    }
};

3 参考

  1. 【图解】曼哈顿距离转切比雪夫距离(Python/Java/C++/Go)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YMWM_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值