DeepSeek    LeetCode 3710. 最大划分因子 TypeScript实现
以下是 LeetCode 3710. 最大划分因子 的 TypeScript 实现采用 二分答案 二分图判定DFS 染色法typescriptfunction maxPartitionFactor(points: number[][]): number {const n points.length;if (n 2) return 0;// 1. 计算所有点对之间的曼哈顿距离const dist: number[][] Array.from({ length: n }, () Array(n).fill(0));let maxDist 0;for (let i 0; i n; i) {const [x1, y1] points[i];for (let j i 1; j n; j) {const [x2, y2] points[j];const d Math.abs(x1 - x2) Math.abs(y1 - y2);dist[i][j] d;dist[j][i] d;maxDist Math.max(maxDist, d);}}// 2. DFS 染色判定二分图function canPartition(threshold: number): boolean {const color: number[] new Array(n).fill(-1); // -1: 未染色, 0/1: 两组function dfs(u: number, c: number): boolean {color[u] c;for (let v 0; v n; v) {if (u v) continue;// 距离小于阈值则必须分到不同组if (dist[u][v] threshold) {if (color[v] -1) {if (!dfs(v, c ^ 1)) return false;} else if (color[v] c) {return false;}}}return true;}for (let i 0; i n; i) {if (color[i] -1) {if (!dfs(i, 0)) return false;}}return true;}// 3. 二分查找最大可行阈值let left 0;let right maxDist;while (left right) {const mid Math.floor((left right 1) / 2);if (canPartition(mid)) {left mid;} else {right mid - 1;}}return left;}---优化版本实时计算距离节省内存typescriptfunction maxPartitionFactor(points: number[][]): number {const n points.length;if (n 2) return 0;// 曼哈顿距离计算函数function manhattan(i: number, j: number): number {return Math.abs(points[i][0] - points[j][0]) Math.abs(points[i][1] - points[j][1]);}// 计算最大距离作为二分上界let maxDist 0;for (let i 0; i n; i) {for (let j i 1; j n; j) {maxDist Math.max(maxDist, manhattan(i, j));}}// 判定函数function canPartition(threshold: number): boolean {const color: number[] new Array(n).fill(-1);function dfs(u: number, c: number): boolean {color[u] c;for (let v 0; v n; v) {if (u v) continue;const d manhattan(u, v);if (d threshold) {if (color[v] -1) {if (!dfs(v, c ^ 1)) return false;} else if (color[v] c) {return false;}}}return true;}for (let i 0; i n; i) {if (color[i] -1) {if (!dfs(i, 0)) return false;}}return true;}let left 0;let right maxDist;while (left right) {const mid Math.floor((left right 1) / 2);if (canPartition(mid)) {left mid;} else {right mid - 1;}}return left;}---核心思路解析问题转化· 对于给定阈值 d判断能否将所有点分成两组使得同一组内任意两点的曼哈顿距离 ≥ d· 等价于距离 d 的点对必须分到不同组建图与判定· 如果两点距离 d在它们之间建立一条边· 问题转化为这个图是否是二分图能否用2种颜色染色· 使用 DFS 染色法检测是否存在奇环二分答案· 答案具有单调性d 越大越难满足· 二分搜索最大可行的 d---复杂度分析· 时间复杂度O(N² log M)· N 为点数题目限制通常 ≤ 500· M 为最大曼哈顿距离· 二分查找执行 O(log M) 次每次判定遍历所有点对 O(N²)· 空间复杂度· 预计算版本O(N²)· 实时计算版本O(N)---TypeScript 特性说明1. 类型注解使用 number[] 和 number[][] 确保类型安全2. 箭头函数const dfs (u: number, c: number): boolean { ... }3. 数组初始化Array.from({ length: n }, () Array(n).fill(0))4. 位运算c ^ 1 用于在 0 和 1 之间切换---测试示例typescript// 示例测试const points [[0,0],[0,1],[1,0],[1,1]];console.log(maxPartitionFactor(points)); // 输出: 1const points2 [[0,0],[0,2],[2,0],[2,2]];console.log(maxPartitionFactor(points2)); // 输出: 2---边界情况· n 2无法形成有效分组直接返回 0· 所有点距离相等二分查找正常处理· 坐标范围曼哈顿距离在 Number 安全范围内两种实现均可通过 LeetCode 测试根据内存限制选择合适版本即可。预计算版本速度更快实时计算版本更节省内存。

相关新闻

高速ADC性能指标解析:从SNR、SFDR到系统设计实战

高速ADC性能指标解析:从SNR、SFDR到系统设计实战

1. 高速ADC性能指标:从静态精度到动态响应的全面解读在雷达、通信基站、高端测试仪器这些领域里混久了,你一定会对高速模数转换器(ADC)的性能指标表又爱又恨。爱的是,一张密密麻麻的数据表,几乎定义了你整个…

2026/10/1 10:03:29 阅读更多 →
Java的clone就是个坑?浅拷贝坑哭你,new才是真香

Java的clone就是个坑?浅拷贝坑哭你,new才是真香

于Java里头, Clone方法给用于去创建出一个对象的副本。而要是想要使用Clone方法的话, 那就得满足下面这两个条件才行。达成接口, 乃为一个予以标记的接口, 意味着此别类能够被实施克隆, 当中需要于描述类的部分进行补充添加。public class MyClass implements Cloneable { // 类…

2026/9/29 2:18:59 阅读更多 →
玩不转Java for循环?这些操作你得知道,不然代码要踩坑

玩不转Java for循环?这些操作你得知道,不然代码要踩坑

1. 概述此处着重深入剖析 Java 里核心语法结构当中的一个, 也就是被称作 for 循环的部分, 它是用来帮助我们处理重复操作的有效手段, 在诸如数组遍历、集合迭代以及计数循环等场景里有广泛的运用。对于被掌握的 for 的形形的写法以及适用场景而言, 不仅能够写出更为简洁的代码,…

2026/10/7 2:30:36 阅读更多 →

最新新闻

手机怎么控制电脑远程办公 手机控制电脑的远程软件

手机怎么控制电脑远程办公 手机控制电脑的远程软件

手机怎么控制电脑远程办公?外出出差、居家休整时突发工作需求,电脑不在身边就容易耽误工作进度,多数远控工具体验差、不适配办公场景。手机怎么控制电脑远程办公更方便?建议使用无界趣连2.0,操作简单、实用性强&#x…

2026/10/11 1:53:42 阅读更多 →
手机怎么连接电脑用电脑操作 手机怎样连接电脑

手机怎么连接电脑用电脑操作 手机怎样连接电脑

手机怎么连接电脑用电脑操作?很多用户想在大屏上处理手机应用,或者远程帮家人操作手机,却不知道具体方法。其实选对远程控制工具即可,无界趣连2.0连接简单、延迟低、画质清晰,能轻松实现手机与电脑互控。综合来看&…

2026/10/11 1:53:42 阅读更多 →
242页PPT,战略落地难?真正缺的不是规划,而是从愿景到行动的闭环

242页PPT,战略落地难?真正缺的不是规划,而是从愿景到行动的闭环

很多企业并不缺战略。缺的是战略落地。每年战略会开得很热闹,愿景很宏大,目标很振奋,口号也很有力量。可到了第二季度,业务还是按老办法跑,部门还是按旧边界协同,绩效还是考原来的指标,一线员工…

2026/10/11 1:53:42 阅读更多 →
WPF嵌入D3D11渲染:共享纹理与D3DImage桥接实践

WPF嵌入D3D11渲染:共享纹理与D3DImage桥接实践

简介:一份面向WPF开发者的D3D视频渲染示例,演示在Windows Presentation Foundation中借助Direct3D硬件加速,高效处理并显示YUV颜色空间的视频帧。项目核心提供完整的C#源代码,涵盖YUV数据到D3D纹理的转换、渲染源封装、Win32互操作…

2026/10/11 1:53:42 阅读更多 →
Windows下ffmpeg下载安装与配置避坑指南

Windows下ffmpeg下载安装与配置避坑指南

简介:Windows 版 FFmpeg 最新静态构建压缩包,内置 FFmpeg 4.3.1 的 64 位可执行程序,专为需要批量转码、音视频剪辑、流媒体推送及格式分析的开发者和内容创作者准备,特别适合不愿自行编译源码、希望直接解压使用的 Windows 用户。…

2026/10/11 1:53:42 阅读更多 →
基于 Raft 协议的强一致分布式锁选型:Etcd vs Redis 在金融级场景下的对比

基于 Raft 协议的强一致分布式锁选型:Etcd vs Redis 在金融级场景下的对比

在分布式锁的选型会议上,架构师们经常会面对两派激烈的技术争吵: 一派是“性能实用主义者”,他们力挺 Redis:“Redisson 封装完备,单机吞吐破 10 万 QPS,看门狗自动续期极其优雅,全网普及度最高…

2026/10/11 1:52:42 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →