力扣3102.最小化曼哈顿距离
题目
题目解析及思路
题目要求返回移除一个点后的最小的最大曼哈顿距离
最大最小值的题一般直接想到二分
本题有一个简单办法就是利用切比雪夫距离
当正方形转45°,即边上点**( x , y ) -> (x + y , y - x)时,两点间max(横坐标差值,纵坐标差值)即为两点间曼哈顿距离,从而将一个加法式子转化成了取最大值的式子**
因此找k个点的最小曼哈顿距离就是找k个点中max(最大x-最小x,最大y-最小y)
代码
class Solution {
public:int minimumDistance(vector<vector<int>>& points) {multiset<int> sx,sy;//把所有点加进去,一个删一个for(auto& p:points){sx.insert(p[0] + p[1]);sy.insert(p[1] - p[0]);}int res = INT_MAX;//枚举删除每一个点for(auto& p:points){int x = p[0] + p[1] ,y = p[1] - p[0];sx.erase(sx.find(x));sy.erase(sy.find(y));int dx = *sx.rbegin() - *sx.begin();int dy = *sy.rbegin() - *sy.begin();res = min(res,max(dx,dy));sx.insert(x);sy.insert(y);}return res;}
};