数学,LeetCode 3102. 最小化曼哈顿距离

一、题目

1、题目描述

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

两点之间的距离定义为它们的

曼哈顿距离

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

2、接口描述

python3
 ​
class Solution:def minimumDistance(self, points: List[List[int]]) -> int:
cpp
 ​
class Solution {
public:int minimumDistance(vector<vector<int>>& points) {}
};
C#
 ​
public class Solution {public int MinimumDistance(int[][] points) {}
}

3、原题链接

3102. 最小化曼哈顿距离


二、解题报告

1、思路分析

有的做法是将曼哈顿距离转化为切比雪夫距离的,个人还是比较喜欢下面这种做法,也是当初周赛的时候写的做法:

对于任意两个坐标(a, b), (c, d)

不妨设其曼哈顿距离为 a - c + b - c = a + b - c - d

我们发现坐标(a, b)和(c, d)曼哈顿距离中每个维度的系数相反

而对于二维坐标的系数无非就(-1, -1), (-1, 1), (1, -1), (1, 1)4种情况

每种情况下的最大值和最小值之差 的 最大值就是我们的最大曼哈顿距离

该做法可以推广到n维坐标,时间复杂度为(2^N * M)M为坐标个数

2、复杂度

时间复杂度: O(4n)空间复杂度:O(n)

3、代码详解

python3
 ​
fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
class Solution:def minimumDistance(self, points: List[List[int]]) -> int:n = len(points)res = 10**9buf = []tt = 0for a, b in (1, 1), (-1, -1), (1, -1), (-1, 1):ma, mi = -10**9, 10**9mai = mii = -1for i, (x, y) in enumerate(points):t = a * x + b * yif t > ma:ma, mai = t, iif t < mi:mi, mii = t, itt = fmax(tt, ma - mi)if ma - mi > tt:tt = ma - mibuf = [mai, mii]elif ma - mi == tt:buf.extend([mai, mii])for i in buf:tt = 0for a, b in (1, 1), (-1, -1), (1, -1), (-1, 1):ma, mi = -10**9, 10**9for j, (x, y) in enumerate(points):if j == i:continuet = a * x + b * yma = fmax(ma, t)mi = fmin(mi, t)tt = fmax(tt, ma - mi)res = fmin(res, tt)return res
cpp
 ​
class Solution {
public:int minimumDistance(vector<vector<int>>& points) {int n = points.size(), ret = 1e9, s = 0;vector<int> buf;for(int i = 0, ed = (1 << 2); i < ed; i++){int ma = -1e9, mi = 1e9, mai, mii;for(int j = 0, s; j < n; j++){int sum = 0;for(int k = 0; k < 2; k++)if(i >> k & 1) sum -= points[j][k];else sum += points[j][k];if(sum > ma) ma = sum, mai = j;if(sum < mi) mi = sum, mii = j;}if(ma - mi > s) s = ma - mi, buf = { mai, mii };else if(ma - mi == s) buf.insert(buf.end(), { mai, mii } );}for(auto x : buf){s = 0;for(int i = 0, ed = (1 << 2); i < ed; i++){int ma = -1e9, mi = 1e9, mai, mii;for(int j = 0, s; j < n; j++){if(j == x) continue;int sum = 0;for(int k = 0; k < 2; k++){if(i >> k & 1) sum -= points[j][k];else sum += points[j][k];}if(sum > ma) ma = sum, mai = j;if(sum < mi) mi = sum, mii = j;}if(ma - mi > s) s = ma - mi;}ret = min(ret , s);}return ret;}
};
C#
 ​
using System;
using System.Collections.Generic;
using System.Linq;public class Solution
{public int MinimumDistance(IList<IList<int>> points){int n = points.Count;int res = (int)Math.Pow(10, 9);List<int> buf = new List<int>();int tt = 0;Func<int, int, int> fmax = (x, y) => x > y ? x : y;Func<int, int, int> fmin = (x, y) => x < y ? x : y;var d = new List<(int, int)> { (1, 1), (-1, -1), (1, -1), (-1, 1) };foreach (var (a, b) in d){int ma = int.MinValue, mi = int.MaxValue;int mai = -1, mii = -1;for (int i = 0; i < points.Count; i++){int x = points[i][0];int y = points[i][1];int t = a * x + b * y;if (t > ma) {ma = t;mai = i;}if (t < mi) {mi = t;mii = i;}}tt = fmax(tt, ma - mi);if (ma - mi > tt){tt = ma - mi;buf = new List<int> { mai, mii };}else if (ma - mi == tt){buf.AddRange(new List<int> { mai, mii });}}foreach (int i in buf){tt = 0;foreach (var (a, b) in d){int ma = int.MinValue, mi = int.MaxValue;for (int j = 0; j < points.Count; j++){if (j == i) continue;int x = points[j][0];int y = points[j][1];int t = a * x + b * y;ma = fmax(ma, t);mi = fmin(mi, t);}tt = fmax(tt, ma - mi);}res = fmin(res, tt);}return res;}
}

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

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

相关文章

Dynadot 2024年第一季度回顾

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

java进程把服务器CPU打满问题排查

1、top命令定位问题进程 2、查看进程的所有线程信息&#xff0c;记下占用最高的进程 top -Hp 38080553、将第2步得到的线程号转化为十六进制 printf %x\n 38080594、结果里搜索 jstack 3808055|grep -A 10 3a1b3b5、定位问题 根据上步搜索到的结果&#xff0c;可以看到是GC…

【PyQt5】

PyQT5线程基础&#xff08;1&#xff09; 分离UI主线程和耗时子线程QThread自定义信号 分离UI主线程和耗时子线程 在应用程序中&#xff0c;主线程负责处理用户的输入事件、更新UI元素和响应系统的回调&#xff0c;而耗时的任务&#xff08;例如网络请求、数据库访问、图像处理…

关闭这八个电脑设置,保护个人隐私

你知道吗&#xff1f;电脑可能一直在偷窥你的小秘密。朋友们&#xff0c;一定要记得关闭这8个电脑设置哦&#xff0c;这样可以有效地保护我们的个人隐私。 按住键盘Windows键加i键&#xff0c;快速打开Windows设置。然后点击隐私选项。 我们来看基本的常规设置。里面有四个设置…

在表格中选中el-radio后, 怎么获取选中的这一行的所有数据?

演示: 图中, 选中这行数据后, 怎么获取到当前的数据? 代码: <tr v-for"item in gridData"><td><input type"radio" v-model"checkout" change"getDateFn" :data-type"item.articleType" :data-channelNam…

GEE代码实例教程详解:年度和月度土地覆盖变化分析

简介 在本篇博客中&#xff0c;我们将使用Google Earth Engine (GEE) 对土地覆盖变化进行年度和月度的分析。通过Google的Dynamic World数据集&#xff0c;我们可以识别2023年至2024年间土地覆盖的类型和变化。 背景知识 Google Dynamic World数据集 Google/DYNAMICWORLD/V…

百川工作手机实现销售管理微信监控系统

在瞬息万变的商业战场中&#xff0c;每一分效率的提升都是企业制胜的关键。传统销售管理模式已难以满足现代企业对精准、高效、合规的迫切需求。今天&#xff0c;让我们一同探索如何利用工作手机这一创新工具&#xff0c;为您的销售团队装上智能翅膀&#xff0c;开启销售管理的…

基于springboot+vue实现的厨艺交流平台(文末源码+Lw)093

93基于SpringBootVue的实现的厨艺交流平台&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 这次开发的厨艺交流平台功能有个人中心&#xff0c;食材分类管理&#xff0c;用户管理&#xff0c;菜品分类管理&#xff0c;菜谱信…

解锁敦煌网成功秘籍:批量注册买家号测评的高效策略

敦煌网&#xff08;DHgate&#xff09;作为一个跨境电商平台&#xff0c;搭建境外本土网络环境并实现批量注册买家号下单&#xff0c;需要遵循一系列严谨的步骤和考虑多个关键因素。以下是一个概括性的指南&#xff1a; 一、环境要求 国外服务器&#xff1a;首先&#xff0c;…

HumbleBundle7月虚幻捆绑包30件军事题材美术模型沙漠自然环境大逃杀模块化建筑可定制武器包二战现代坦克飞机道具丧尸士兵角色模型20240705

HumbleBundle7月虚幻捆绑包30件军事题材美术模型沙漠自然环境大逃杀模块化建筑可定制武器包二战现代坦克飞机道具丧尸士兵角色模型202407051607 这次HumbleBundle捆绑包是UE虚幻军事题材的&#xff0c;内容非常多。 有军事基地、赛博朋克街区、灌木丛景观环境等 HB捆绑包虚幻…

7-打包安装程序

接下来假设我们想要将我们的项目分发给其他人&#xff0c;以便他们可以使用它。我们希望在各种平台上提供二进制和源代码发行版。这与我们之前在安装和测试中所做的安装略有不同&#xff0c;在安装中我们安装了从源代码构建的二进制文件。在本例中&#xff0c;我们将构建支持二…

C# 构造函数依赖注入 使用out向外传递参数

天真目前解决方法 天真 using System;namespace forCode20191 {class Program {static void Main(string[] args) {bool flag false;Tmp tt new Tmp(out flag);Console.WriteLine(flag); // 将输出 falsett.Doit();Console.WriteLine(flag); // 将输出 trueConsole.ReadKey(…

“DDoS攻击的最新防御策略:从检测到缓解的全方位方案“

DDoS攻击的最新防御策略 DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;是网络安全领域的重大威胁&#xff0c;它通过大量的恶意流量淹没目标服务器或网络&#xff0c;导致服务不可用。为了有效防御DDoS攻击&#xff0c;最新的策略强调从检测到缓解的全方位方案。 多层防…

深度学习的数学PDF

链接: https://pan.baidu.com/s/1_jScZ7dcyAWGqbrad6bbCQ?pwd9gj9 提取码: 9gj9 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦

【苍穹外卖】Day2 手把手敲完细节

目录 1. 新增员工 1.1 需求分析和设计 1.2 代码开发 ①定义DTO类&#xff1a;(在sky-pojo里&#xff09; ②EmployeeController中创建新增员工方法save() ③EmployeeService里声明save方法&#xff08;altenter&#xff09; ④EmployeeServiceImpl中实现save方法 ⑤在E…

顶刊文献阅读及代码复现

前提:每个无人机都有 (i)自己的机载计算机,用于执行控制其自身动作所需的计算 (ii)自己的传感器系统,用于测量相对位置和速度, (iii)自己的通信设备,用于与相邻代理进行数据交换。 模型:短期的排斥力、中间范围的速度一致性和长距离的吸引力

通过PLC地址来切换威纶通触摸屏界面

Step 1 元件-PLC控制 Step 2 新增 选择设备 选择切换基本窗口功能 选择触发地址 Step 3 离线仿真测试 在数值框中输入对应的页面号 可以看到页面可以正常切换 分享创作不易&#xff0c;请多多支持&#xff0c;点赞、收藏、关注&#xff01; Ending~

昇思Mindspore25天学习打卡Day20:DCGAN生成漫画头像

昇思Mindspore25天学习打卡Day20&#xff1a;DCGAN生成漫画头像 1 GAN基础原理2 DCGAN原理3 数据准备与处理数据处理 4 构造网络4.1 生成器4.2 判别器 5 模型训练损失函数优化器训练模型 6 结果展示7 训练结束打上标签和时间 在下面的教程中&#xff0c;我们将通过示例代码说明…

为什么裁员先裁技术人员?网友给答复

网友1&#xff1a;技术岗本身就是项目制的&#xff0c;项目完成&#xff0c;后续项目运营的收益与技术无关。之前是项目多&#xff0c;所以收益持续走高&#xff0c;现在都在减项目&#xff0c;自然先减技术岗。 网友2&#xff1a;房子盖起来了&#xff0c;还需要农民工么? …

基于STM主题模型的主题提取分析-完整代码数据

直接看结果: 代码: import re from collections import defaultdict import random import matplotlib.pyplot as plt import numpy as npimport pandas as pd import numpy as np import re from sklearn.feature_extraction.text import CountVectorizer from nltk.corpus…