1. 题意
给定 n n n个点,让剔除一个点,使得剩下点的最大曼哈顿距离最小。
2. 题解
曼哈顿距离
d ( a , b ) = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d(a,b)=\lvert x_1-x_2 \rvert +\lvert y_1-y_2\rvert d(a,b)=∣x1−x2∣+∣y1−y2∣
题目的意思就是
m i n ( m a x { ∣ x i − x j ∣ + ∣ y i − y j ∣ } ) min(max\{\ \lvert x_i-x_j \rvert +\lvert y_i-y_j\rvert\}) min(max{ ∣xi−xj∣+∣yi−yj∣})
如果用暴力做的话,复杂度为 O ( n 3 ) O(n^3) O(n3),肯定会超时的。
需要做一个数学上的转化:曼哈顿距离转切比雪夫距离
d
(
a
,
b
)
=
∣
x
1
−
x
2
∣
+
∣
y
1
−
y
2
∣
d(a,b)=\lvert x_1-x_2 \rvert +\lvert y_1-y_2\rvert
d(a,b)=∣x1−x2∣+∣y1−y2∣
分类讨论
d
(
a
,
b
)
=
x
1
−
x
2
+
y
1
−
y
2
=
(
x
1
+
y
1
)
−
(
x
2
+
y
2
)
d
(
a
,
b
)
=
x
2
−
x
1
+
y
1
−
y
2
=
(
y
1
−
x
1
)
−
(
y
2
−
x
2
)
d
(
a
,
b
)
=
x
2
−
x
1
+
y
2
−
y
1
=
(
x
2
+
y
2
)
−
(
x
1
+
y
1
)
d
(
a
,
b
)
=
x
1
−
x
2
+
y
2
−
y
1
=
(
y
2
−
x
2
)
−
(
y
1
−
x
1
)
\begin{align} d(a,b)=x_1-x_2+y_1-y_2=(x_1+y_1)-(x_2+y_2)\\ d(a,b)=x_2-x_1+y_1-y_2=(y_1-x_1)-(y_2-x_2)\\ d(a,b)=x_2-x_1+y_2-y_1=(x_2+y_2)-(x_1+y_1)\\ d(a,b)=x_1-x_2+y_2-y_1=(y_2-x_2)-(y_1-x_1)\\ \end{align}
d(a,b)=x1−x2+y1−y2=(x1+y1)−(x2+y2)d(a,b)=x2−x1+y1−y2=(y1−x1)−(y2−x2)d(a,b)=x2−x1+y2−y1=(x2+y2)−(x1+y1)d(a,b)=x1−x2+y2−y1=(y2−x2)−(y1−x1)
对于情况
1
3
1\ 3
1 3可以合并为
m
a
x
(
x
i
+
y
i
)
−
m
i
n
(
x
i
+
y
i
)
max(x_i+y_i)-min(x_i+y_i)
max(xi+yi)−min(xi+yi)
对于情况
2
4
2\ 4
2 4可以可合并为
m
a
x
(
y
i
−
x
i
)
−
m
i
n
(
y
i
−
x
i
)
max(y_i-x_i)-min(y_i-x_i)
max(yi−xi)−min(yi−xi)
所以归纳起来
d ( a , b ) = m i n { max ( x i + y i ) − min ( x i + y i ) , max ( y i − x i ) − min ( y i − x i ) } d(a,b)=min\{ \max(x_i+y_i)-\min(x_i+y_i),\max(y_i-x_i)-\min(y_i-x_i) \} d(a,b)=min{max(xi+yi)−min(xi+yi),max(yi−xi)−min(yi−xi)}
所以我们需要维护两个有序集
x ′ = x + y y ′ = y − x x'=x+y\\ y'=y-x x′=x+yy′=y−x
class Solution {
public:
int minimumDistance(vector<vector<int>> &points) {
multiset<int> xs, ys;
for (auto &p : points) {
xs.insert(p[0] + p[1]);
ys.insert(p[1] - p[0]);
}
int ans = INT_MAX;
for (auto &p : points) {
int x = p[0] + p[1], y = p[1] - p[0];
xs.erase(xs.find(x));
ys.erase(ys.find(y));
ans = min(ans, max(*xs.rbegin() - *xs.begin(), *ys.rbegin() - *ys.begin()));
xs.insert(x);
ys.insert(y);
}
return ans;
}
};
作者:灵茶山艾府
链接:https://leetcode.cn/problems/minimize-manhattan-distances/solutions/2716755/tu-jie-man-ha-dun-ju-chi-heng-deng-shi-b-op84/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。