3102.最小化曼哈顿距离

解题思路

分析时间复杂度,计算任意两点的曼哈顿距离达到 O ( n 2 ) O(n^2) O(n2),会超时需要优化。
因此优化可以将曼哈顿距离与切比雪夫距离的相互关系找出来,然后转换成求切比雪夫距离的方式,得到
d i s t a n c e ( A , B ) = m a x ( ∣ ( x 1 − y 1 ) − ( x 2 − y 2 ) ∣ , ∣ ( x 1 + y 1 ) − ( x 2 + y 2 ) ∣ ) distance(A, B) = max(| (x_1 - y_1) -(x_2 - y_2)|, |(x_1+y_1)-(x_2+y_2)|) distance(A,B)=max((x1y1)(x2y2),(x1+y1)(x2+y2))
。这样,只需要计算每个点的坐标之差、坐标之和即可。
这样,曼达顿距离的最大值,即最大值与最小值的差的最大值。
删除某个点,删除对应的点然后重新计算即可。

曼哈顿距离与切比雪夫距离的相互转换

  • 曼哈顿坐标系是通过切比雪夫坐标系旋45°后,再缩小到原来的一半得到的。
    将一个点 ( x , y ) (x,y) (x,y) 的坐标变为 ( x + y , x − y ) (x + y, x - y) (x+y,xy) 后,原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离。
    将一个点 ( x , y ) (x,y) (x,y) 的坐标变为 ( x + y 2 , x − y 2 ) (\frac{x + y}{2},\frac{x - y}{2}) (2x+y,2xy) 后,原坐标系中的切比雪夫距离等于新坐标系中的曼哈顿距离。
    碰到求切比雪夫距离或曼哈顿距离的题目时,我们往往可以相互转化来求解。两种距离在不同的题目中有不同的优缺点,应该灵活运用。

Java

class Solution {public int minimumDistance(int[][] points) {// 维护距离数组// 可以使用映射关系的数据集合进行存储TreeMap<Integer, Integer> sx = new TreeMap<Integer, Integer>();TreeMap<Integer, Integer> sy = new TreeMap<Integer, Integer>();// 遍历二维列表for (int[] p : points){sx.put(p[0] - p[1], sx.getOrDefault(p[0] - p[1], 0)+1);sy.put(p[0] + p[1], sy.getOrDefault(p[0] + p[1], 0)+1);}int res = Integer.MAX_VALUE;for (int[] p : points){sx.put(p[0] - p[1], sx.get(p[0] - p[1]) - 1);if (sx.get(p[0] - p[1]) == 0){sx.remove(p[0] - p[1]);}sy.put(p[0] + p[1], sy.get(p[0] + p[1]) - 1);if (sy.get(p[0] + p[1]) == 0) {sy.remove(p[0] + p[1]);}res = Math.min(res, Math.max(sx.lastKey() - sx.firstKey(), sy.lastKey() - sy.firstKey()));sx.put(p[0] - p[1], sx.getOrDefault(p[0] - p[1], 0) + 1);sy.put(p[0] + p[1], sy.getOrDefault(p[0] + p[1], 0) + 1);}return res;}
}

C++

class Solution {
public:int minimumDistance(vector<vector<int>>& points) {// 维护两个集合multiset<int> sx, sy;for (auto & p : points){sx.emplace(p[0] - p[1]);sy.emplace(p[0] + p[1]);}int res = INT_MAX;for (auto & p :points){// 先消除sx.erase(sx.find(p[0] - p[1]));sy.erase(sy.find(p[0] + p[1]));// 更新res = min(res, max(*sx.rbegin() - *sx.begin(), *sy.rbegin() - *sy.begin()));sx.emplace(p[0] - p[1]);sy.emplace(p[0] + p[1]); // 恢复}return res;}
};

Python

from sortedcontainers import SortedList
class Solution:def minimumDistance(self, points: List[List[int]]) -> int:sx = SortedList(p[0] - p[1] for p in points)sy = SortedList(p[0] + p[1] for p in points)res = float('inf')for p in points:sx.remove(p[0] - p[1])sy.remove(p[0] + p[1])res = min(res, max(sx[-1] - sx[0], sy[-1] - sy[0]))sx.add(p[0] - p[1])sy.add(p[0] + p[1])return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot实战:轻松实现接口数据脱敏

文章目录 引言一、接口数据脱敏概述1.1 接口数据脱敏的定义1.2 接口数据脱敏的重要性1.3 接口数据脱敏的实现方式 二、开发环境三、实现接口返回数据脱敏3.1 添加依赖3.2 创建自定义注解3.3 定义脱敏枚举类3.4 创建自定义序列化类 四、测试4.1 编写测试代码4.2 测试 五、总结 引…

vmware workstation安装debian虚拟机有时无法访问windows共享文件夹

问题 安装好debian12之后&#xff0c;已经按要求安装了vmhgfs工具&#xff0c;然后进行文件共享&#xff0c;是可以连接上的&#xff0c;但重启虚拟机后&#xff0c;共享文件夹就无法访问了 解决办法&#xff0c;参考&#xff1a;在 Linux 客户机中装载共享文件夹的办法 vmh…

C++基础(七):类和对象(中-2)

上一篇博客学的默认成员函数是类和对象的最重要的内容&#xff0c;相信大家已经掌握了吧&#xff0c;这一篇博客接着继续剩下的内容&#xff0c;加油&#xff01; 目录 一、const成员&#xff08;理解&#xff09; 1.0 引入 1.1 概念 1.2 总结 1.2.1 对象调用成员函数 …

多尺度旋转编码

ROPE编码中不使用所有维度旋转同样的角度&#xff0c;而是对成对的维度进行不同的旋转角度&#xff0c;这样设计的原因在于它能够捕捉不同尺度上的位置信息&#xff0c;并且更好地处理长序列数据。让我们更详细地解释一下&#xff1a; 1. 多尺度位置信息 通过对不同维度成对使…

自动群发消息插件常用源代码科普!

随着网络技术的快速发展&#xff0c;自动群发消息插件成为了众多企业和个人提高效率、加强沟通的重要工具。 然而&#xff0c;开发一个高效且稳定的自动群发消息插件并非易事&#xff0c;需要深入理解并熟练掌握相关的源代码。 本文将从五个方面&#xff0c;通过具体的源代码…

Ubuntu 添加so库搜索路径

方法一&#xff1a; 修改 /etc/ld.so.conf文件 将需要配置的库复制到一个目录中&#xff0c;注意复制指令需要添加 -a 选项, -a选项可以将现有so库的链接关系一同拷贝&#xff0c;如果不加 -a 需要重新使用 ln进行链接: sudo cp -a *.so* /libsdk/编辑 /etc/ld.so.conf文件 …

通俗易懂--.csproj 文件

.csproj 文件 .csproj&#xff0c;是C#项目文件的扩展名&#xff0c;它是“C Sharp Project”的缩写。.net开发环境中建立项目时&#xff0c;会产生.csproj文件&#xff0c;这是C#的工程文件&#xff0c;其中记录了与工程有关的相关信息&#xff0c;例如包含的文件&#xff0c;…

WebKit源代码探秘:深入理解其组织结构与组件

WebKit是一个开源的浏览器引擎&#xff0c;最初由苹果公司开发&#xff0c;现在由许多贡献者共同维护。它以其高性能、易用性和可扩展性而闻名&#xff0c;被用于多个流行的浏览器和应用程序中。WebKit的源代码组织是模块化的&#xff0c;使得开发者可以轻松地找到所需的组件并…

2024第六届上海国际新材料展览会-12月精彩呈现

2024第六届上海国际新材料展览会 The 6th shanghai International New Materials Exhibition in 2024 时 间&#xff1a;2024年12月18-20日 地 点&#xff1a;上海新国际博览中心 CIME 2024专业、权威&#xff0c;涵盖整个新材料行业的国际盛会。 期待与您在CIME 2024现场相…

【INTEL(ALTERA)】为什么我使用 PIO 边缘捕获中断的 Nios® II 设计不能正常工作?

目录 说明 解决方法 说明 当用户选择了不正确的边缘捕获设置&#xff0c;从而阻止触发中断时&#xff0c;可能会出现此问题。 在 PIO&#xff08;并行 I/O&#xff09;英特尔 FPGA IP内核中&#xff0c;如果“启用单个位设置/清除”选项被关闭&#xff0c;则将任何值写入边…

精通C#编程需要学习哪些常用框架?

精通C#编程&#xff0c;了解并熟练运用一些核心框架对于开发高质量的应用程序至关重要。以下是一些C#开发中常用的框架&#xff1a; .NET Core / .NET 6: 这是C#现代应用程序开发的基础框架&#xff0c;支持跨平台&#xff08;Windows、Linux、macOS&#xff09;开发。它包括了…

如何判断服务器是否被攻击

如何判断服务器是否被攻击 一、异常流量模式 一种判断服务器是否遭到攻击的方法是监控网络流量。异常的流量模式&#xff0c;例如流量突然剧增或减少&#xff0c;都可能是攻击的迹象。通常&#xff0c;大量的入站流量表明分布式拒绝服务&#xff08;DDoS&#xff09;攻击的可能…

git合并报错:git -c core.quotepath=false -c log.showSignature=false merge r

这个错误通常发生在 Git 尝试合并两个没有共同祖先的历史时&#xff0c;比如在合并不同的分支或仓库时&#xff0c;可以尝试以下几种方法&#xff1a; 允许不相关历史的合并: git merge release-3.6 --allow-unrelated-histories这个选项告诉 Git 允许合并两个没有共同历史的分…

【购物车案例】for循环为什么使用key

要做出一个简单的购物车界面。首先&#xff0c;有一个复选框&#xff0c;可以选择商品&#xff0c;后面紧跟的是商品名称&#xff0c;然后&#xff0c;是删除按钮&#xff0c;根据这个需求&#xff0c;先写出一个简单的界面&#xff0c;代码如下&#xff1a; <template>…

有关区块链的一些数学知识储备

1.集合 集合是由不同对象组成的整体&#xff08;collections of objects&#xff09;的数学模型&#xff0c;这些对象被称为集合的元素&#xff08;elements&#xff09;。整数&#xff08;Integers&#xff09;、有理数&#xff08;Rational numbers&#xff09;、实数&#x…

openssh9.8p1更新 修复漏洞(CVE-2024-6387)

2024 年 7 月&#xff0c;互联网公开披露了一个 OpenSSH 的远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;。鉴于该漏洞虽然利用较为困难但危害较大&#xff0c;建议所有使用受影响的企业尽快修复该漏洞。 centos7 为例 yum -y install gcc make openssl-devel zlib…

【区块链+跨境服务】基于区块链的离岸贸易综合服务平台 | FISCO BCOS应用案例

离岸贸易是一种新型的国际贸易模式&#xff0c;指在一个国家或地区的境内&#xff0c;通过一定的方式&#xff0c;将两个或多个国家或地区 之间的贸易活动&#xff0c;从货物流、资金流和信息流三个方面分离开来&#xff0c;实现货物不经过境内&#xff0c;直接从一个国家或地区…

三相感应电机的建模仿真(3)基于ABC相坐标系Level2 S-Fun以及定子串不对称电抗起动过程仿真分析

1. 概述 2. 三相感应电动机状态方程式 3. 基于Level2 S-Function的仿真模型建立 4. 动态分析实例 5. 总结 6. 参考文献 1. 概述 三相感应电机自然坐标系下的数学模型是一组周期性变系数微分方程(其电感矩阵是转子位置角的函数,转子位置角随时间按正弦规律变化),将其用…

[hudsonL@cock.li].mkp勒索病毒的最新威胁:如何恢复您的数据?

引言&#xff1a; 在当今数字化时代&#xff0c;勒索病毒成为网络安全领域的一个严重挑战。最近出现的.[hudsonLcock.li].mkp、[hendersoncock.li].mkp、[myersairmail.cc].mkp勒索病毒&#xff0c;以其具有破坏力的加密技术和极具威胁性的赎金要求&#xff0c;给个人用户和组…

解决idea中无法通过“download source”下载源码的问题

如果jar包不是自己的 在项目pom.xml同级目录下使用命令控制行输入指令 mvn dependency:resolve -Dclassifiersources缺点: 会下pom中所有jar包的源码&#xff0c;如果jar包本身不含源码的话&#xff0c;执行指令也没有效果 如果自己能拿到源码 在开发环境中的pom中&#xf…