數學,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.pswp.cn/web/42473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42473.shtml
英文地址,請注明出處:http://en.pswp.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…