3102. 最小化曼哈顿距离——leetcode

给你一个下标从 0 开始的数组 points ,它表示二维平面上一些点的整数坐标,其中 points[i] = [xi, yi] 。

两点之间的距离定义为它们的曼哈顿距离。

请你恰好移除一个点,返回移除后任意两点之间的 最大 距离可能的 最小 值。

示例:

输入:points = [[3,10],[5,15],[10,2],[4,4]]
输出:12
解释:移除每个点后的最大距离如下所示:
- 移除第 0 个点后,最大距离在点 (5, 15) 和 (10, 2) 之间,为 |5 - 10| + |15 - 2| = 18 。
- 移除第 1 个点后,最大距离在点 (3, 10) 和 (10, 2) 之间,为 |3 - 10| + |10 - 2| = 15 。
- 移除第 2 个点后,最大距离在点 (5, 15) 和 (4, 4) 之间,为 |5 - 4| + |15 - 4| = 12 。
- 移除第 3 个点后,最大距离在点 (5, 15) 和 (10, 2) 之间的,为 |5 - 10| + |15 - 2| = 18 。
在恰好移除一个点后,任意两点之间的最大距离可能的最小值是 12 。

官方题解: 

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;
    }
}

今天又破戒了,看了官方题解,这里对力扣官方提交进行详细解释(这里是up的个人理解,如果有错误请指出):

对题意进行理解:

  • 曼哈顿距离不是两点间距离;
  • 任意去掉一个点,找到是此时任意两点间最大值的最小值;

解题思路:

        枚举出去掉一个点后任意两点的最大值的所有情况,最后取最小值。

如果只是简单的枚举,包超时的,这里就要在数学上进行转换:

曼哈顿距离length = \left |x _{1}-x_{2} \right | + \left | y_{1}-y_{2} \right |

x_{1}>x_{2},y_{1}>y_{2}时,length = x_{1} - x_{2} + y_{1} - y_{2}

x_{1}<x_{2},y_{1}>y_{2}时,length = -x_{1} + x_{2} + y_{1} - y_{2}

x_{1}>x_{2},y_{1}<y_{2}时,length = x_{1} - x_{2} - y_{1} + y_{2}

x_{1}<x_{2},y_{1}<y_{2}时,length = -x_{1} + x_{2} - y_{1} + y_{2}

以代码形式合成一下:

length = Math.max(Math.abs(x1+y1-x2-y2),Math.abs(x1-y1+-x2+y2));

        这里,官方题解用两个TreeMap记录并排序了各个点x-y和x+y的情况,用value来判断该点是否被去掉,在第一个循环中,记录x-y和x+y的情况,而在第二个循环中,先将i处的点移除(通过key让value-1,判断其是否为0,为0则删除),然后寻找最大的x-y减去最小的x-y和最大的x+y减去最小的x+y,将其看作两个点,刚好是x1+y2-y1-x2和x1+y1-x2-y2,对其分别取绝对值,找出最大值,最后在与res对比,找出最小值,返回res。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机的核心工作机制

前言 本篇不介绍代码&#xff0c;主要是理解计算机的一些核心工作机制。想了解更多请跳转-->【【计算机科学速成课】[40集全/精校] - Crash Course Computer Science】 冯诺依曼体系结构 由计算机之父之一冯诺依曼提出的计算机内部构造的基本组成&#xff0c;而现在大多数…

向github远程仓库中push,要求使用token登录

Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 如上&#xff0c;当向github远程仓库push时&#xff0c;输入github的用户名和密码出现如上错误&#xff0c;要求使用token登录&#xff0c;此时只需要用户…

智慧光伏一站式解决方案

光伏电站智慧化管理平台&#xff0c;将现代先进的数字信息技术、通信技术、互联网技术、云计算技术、大数据挖掘技术与光伏技术高度融合而形成。可以满足光伏企业对电站的高发电量、低初始投资、低运维成本等需求&#xff0c;从开发到运维的25年生命周期内&#xff0c;实现高收…

短视频矩阵搭建,用云微客获客更方便

你的同行都爆单了&#xff0c;你还在问什么是矩阵&#xff1f;让我来告诉你。短视频矩阵是短视频获客的一种全新玩法&#xff0c;是以品牌宣传、产品推广为核心的一个高端布局手段&#xff0c;也是非常省钱的一种方式。 1.0时代&#xff0c;一部手机一个账号&#xff1b;2.0时代…

【多媒体】Java实现MP4和MP3音视频播放器【JavaFX】【更多功能的播放器】【音视频播放】

在Java中播放视频可以使用多种方案&#xff0c;最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过&#xff0c;JMF已经不再被推荐使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不适用于跨平台。而且上述方案都需要使用第三方库。…

Linux系统备份工具TimeShift

Linux系统备份 Linux系统备份工具TimeShift Linux系统备份工具TimeShift 0. 前言1. 安装2. 启动3. 使用法一、图形界面操作&#xff08;方便&#xff09;法二、终端命令操作&#xff08;高端&#xff09; Linux系统备份工具TimeShift Linux系统备份工具TimeShift 0. 前言 Time…

SpringMVC--获取请求参数

1、通过的ServletAPI获取 只需要在控制器的方法的形参位置设置HTTPRequest request 类型的形参就i可以在控制器方法种使用request对象获取请求参数 RequestMapping("/servletAPI")public String getByServletAPI(HttpServletRequest request){HttpSession session…

【论文速读】| 用于安全漏洞防范的人工智能技术

本次分享论文&#xff1a;Artificial Intelligence Techniques for Security Vulnerability Prevention 基本信息 原文作者&#xff1a;Steve Kommrusch 作者单位&#xff1a;Colorado State University, Department of Computer Science, Fort Collins, CO, 80525 USA 关键…

硬盘分区读不出来的危机与数据拯救指南

在数字时代&#xff0c;硬盘作为我们存储珍贵数据的“保险箱”&#xff0c;其稳定性和可访问性至关重要。然而&#xff0c;当硬盘分区突然读不出来时&#xff0c;这份安全感瞬间化为泡影&#xff0c;让人心急如焚。本文将深入探讨硬盘分区读不出来的原因、提供两种实用的数据恢…

物流工业三防平板实时跟踪货物位置和状态

在当今全球化和高度数字化的商业环境中&#xff0c;物流行业的高效运作对于企业的成功和经济的繁荣至关重要。货物的准确、实时跟踪不仅能提高物流效率&#xff0c;还能增强客户满意度&#xff0c;降低运营成本。物流工业三防平板的出现&#xff0c;为实现货物位置和状态的实时…

短剧新风潮:海外制作的艺术与技术

海外短剧新风潮在艺术与技术两个维度上都展现出了显著的创新与进步。 艺术层面 1、内容创新&#xff1a; &#xff08;1&#xff09;多元化与包容性&#xff1a;海外短剧在内容创新上更加注重多元化和包容性&#xff0c;将不同地域、民族的文化元素融入创作中&#xff0c;展现丰…

从资金到未来:技术融资如何重塑IT顾问在AI与网络安全的角色?

一方面是人工智能 &#xff08;AI&#xff09; 和机器学习 &#xff08;ML&#xff09; 的双引擎&#xff0c;另一方面是网络安全和数据泄露威胁中不断变化的威胁形势&#xff0c;IT 格局正在经历翻天覆地的变化。这场数字革命对 IT 顾问来说既是挑战也是机遇&#xff0c;但要成…

解读‘‘不要卷模型,要卷应用‘‘

前言 2024 年 7 月 4 日&#xff0c;世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举行。百度创始人李彦宏在产业发展主论坛上发言&#xff0c;呼吁不要卷模型&#xff0c;要卷应用。 目录 四个要点 积极的观点 不合理性 总结 四个要点 李彦宏的呼吁…

【matlab】周期性信号分析

目录 信号预处理 周期性特征提取方法 频谱分析 傅里叶变换 快速傅里叶变换&#xff08;FFT&#xff09; 周期图法 Welch法 自相关分析 时频分析 基于模型的方法 时间序列分解 应用实例 提取信号的周期性特征是一个在信号处理领域广泛应用的技术&#xff0c;特别是在…

C#桌面应用开发:番茄定时器

C#桌面应用开发&#xff1a;番茄定时器 1、环境搭建和工程创建&#xff1a; 步骤一&#xff1a;安装visual studio2022 步骤二&#xff1a;新建工程 2、制作窗体部件 *踩过的坑&#xff1a; &#xff08;1&#xff09;找不到工具箱控件&#xff0c;现象如下&#xff1a;…

化妆品3D虚拟三维数字化营销展示更加生动、真实、高效!

随着人们越来越追求高速便捷的生活工作方式&#xff0c;企业在营销市场也偏国际化&#xff0c;借助VR全景制作技术&#xff0c;将企业1:1复刻到云端数字化世界&#xff0c;能带来高沉浸式的逼真、震撼效果。 通过我们独特的漫游点自然场景过渡技术&#xff0c;您将置身于一个真…

AWS无服务器 应用程序开发—第十七章 Application Composer

Application Composer 是 AWS 提供的一种可视化工具,用于设计和构建无服务器应用程序。它通过拖放界面简化了无服务器架构的创建过程,使开发者能够更直观地设计和配置应用程序的各个组件。 主要功能 可视化设计 通过拖放界面,开发者可以轻松地添加和配置 AWS 资源,如 L…

NVIDIA RTX 4090解析:卓越的性能表现带来全新的AI探索高度

前言 NVIDIA GeForce RTX 4090 在性能、效率和 AI 驱动的图形领域实现了质的飞跃。这款 GPU 采用 NVIDIA Ada Lovelace 架构&#xff0c;配备 24 GB 的 GDDR6X 显存。此外&#xff0c;RTX 4090还引入了多项创新技术。例如&#xff0c;它支持 DirectX12Ultimate&#xff0c;能够…

B站启用adblock插件导致无法看到评论

1 进入adblock插件的设置页面 2 进入自定义规则页面&#xff0c;编辑过滤规则 删除掉这一项 www.bilibili.com##P 然后&#xff0c;点击保存&#xff1b; 刷新页面就可以看到B站评论区的评论了。

[21] Opencv_CUDA应用之使用Haar级联的对象检测

Opencv_CUDA应用之使用Haar级联的对象检测 Haar级联使用矩形特征来检测对象,它使用不同大小的矩形来计算不同的线和边缘特征。矩形包含一些黑色和白色区域,如下图所示,它们在图像的不同位置居中 类Haar特征检测算法的思想是计算矩形内白色像素和黑色像素之间的差异这个方法的…