发布时间:2026/9/4 20:58:33
二分查找在中位数与两有序数组中的极限应用(LeetCode 4 题推导) 二分查找在中位数与两有序数组中的极限应用LeetCode 4 题推导在 LeetCode 算法题库中第 4 题“寻找两个正序数组的中位数Median of Two Sorted Arrays”被公认为二分查找领域的“封神之题”。题目要求在严格的 $O(\log(\min(m, n)))$ 时间复杂度内求出中位数。很多同学虽然能写出双指针合并数组的 $O(m n)$ 解法但在面试官限定“必须对数级时间复杂度且不能开辟额外空间”的硬性要求下往往在多层划分和边界指针的交叉验证上彻底迷失。今天我们用几何切分模型与虚拟边界法把这道题的二分推导逻辑彻底理顺。问题转化从“找中位数”到“寻找第 K 小元素”与“数组完美划分”设两个升序数组分别为 $A$长度 $m$和 $B$长度 $n$。假设 $m \le n$若不满足交换 $A$ 和 $B$ 即可保证对较短数组进行二分。求中位数本质上是在数组 $A$ 和 $B$ 中各切一刀数组 $A$ 在下标 $i$ 处切开分成左半部分 $A[0 \dots i-1]$ 和右半部分 $A[i \dots m-1]$数组 $B$ 在下标 $j$ 处切开分成左半部分 $B[0 \dots j-1]$ 和右半部分 $B[j \dots n-1]$。我们将 $A$ 的左半部分和 $B$ 的左半部分合并为“总左半区”将 $A$ 的右半部分和 $B$ 的右半部分合并为“总右半区”。中位数的充要条件只有两个元素数量平衡总左半区的元素数量等于总右半区当 $mn$ 为偶数时或者比右半区多 1当 $mn$ 为奇数时。$$\text{左半区长度 } i j \frac{m n 1}{2} \implies j \frac{m n 1}{2} - i$$这意味着只要 $i$ 确定了$j$ 就会被严格唯一确定数值交叉有序总左半区的最大值必须 $\le$ 总右半区的最小值。由于 $A$ 和 $B$ 自身已经有序$A[i-1] \le A[i]$ 且 $B[j-1] \le B[j]$我们只需要保证交叉条件成立$$A[i-1] \le B[j] \quad \text{且} \quad B[j-1] \le A[i]$$graph TD A[在较短数组 A 的 [0, m] 区间二分划分点 i] -- B[由数学公式直接算出 j (mn1)/2 - i] B -- C{A[i-1] B[j] ?} C --|是: A 的划分点太靠右| D[向左收缩: right i - 1] C --|否| E{B[j-1] A[i] ?} E --|是: A 的划分点太靠左| F[向右收缩: left i 1] E --|否: 完美命中| G[根据奇偶性直接计算中位数]虚拟边界处理消除复杂的if-else越界特判当切刀切在数组最边缘时如 $i 0$ 或 $i m$$A[i-1]$ 或 $A[i]$ 会发生数组越界。传统写法需要写一长串冗长的三元表达式。我们可以引入正负无穷虚拟哨兵值若 $i 0$定义 $A[i-1] -\infty$Integer.MIN_VALUE若 $i m$定义 $A[i] \infty$Integer.MAX_VALUE若 $j 0$定义 $B[j-1] -\infty$若 $j n$定义 $B[j] \infty$。这样交叉有序判定直接统一为一行逻辑极其优雅。标准生产级代码落地public class FindMedianSortedArraysSolution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { // 保证对较短数组进行二分时间复杂度优化为 O(log(min(m, n))) if (nums1.length nums2.length) { return findMedianSortedArrays(nums2, nums1); } int m nums1.length; int n nums2.length; int left 0; int right m; // 划分点 i 可以取 0 到 m共 m1 种可能 int totalLeft (m n 1) / 2; while (left right) { int i left ((right - left) 1); int j totalLeft - i; int nums1LeftMax (i 0) ? Integer.MIN_VALUE : nums1[i - 1]; int nums1RightMin (i m) ? Integer.MAX_VALUE : nums1[i]; int nums2LeftMax (j 0) ? Integer.MIN_VALUE : nums2[j - 1]; int nums2RightMin (j n) ? Integer.MAX_VALUE : nums2[j]; if (nums1LeftMax nums2RightMin nums2LeftMax nums1RightMin) { // 完美划分计算中位数 if ((m n) % 2 1) { return Math.max(nums1LeftMax, nums2LeftMax); } else { return (Math.max(nums1LeftMax, nums2LeftMax) Math.min(nums1RightMin, nums2RightMin)) / 2.0; } } else if (nums1LeftMax nums2RightMin) { // nums1 切得太靠右了需要向左缩 right i - 1; } else { // nums2 切得太靠右nums1 切得太靠左需要向右扩展 left i 1; } } throw new IllegalArgumentException(输入数组不符合升序前置约束); } }复杂度与面试答题技巧时间复杂度只在长度为 $m$ 的数组上做二分每次排除一半区间严格保证 $O(\log(\min(m, n)))$空间复杂度仅使用常数个局部指针与哨兵变量严格为 $O(1)$。在面试现场千万不要直接上手堆代码。先在白板上画出总左半区与总右半区的划分草图写出 $j \frac{mn1}{2} - i$ 的数学约束再给出正负无穷哨兵的处理思路。面试官对你的数学建模与工程实现能力将给予极高的评价。

相关新闻

2026/9/4 20:58:33

AI Agent失控风险防控:从权限隔离到工作流测试的工程实践

最近 AI Agent 相关的讨论热度一直不低,尤其在多智能体协作、智能体开发、智能体工作流验证这些方向被反复提起之后,一个更具冲击力的说法也频繁出现:“有顶级预测者给出了 72% 的概率,认为当前已经存在人类不知情的失控 AI 智能体…

2026/9/4 21:54:02

科研绘图生成科研图片哪家强?2026 生物医学实验室实测 5 款工具

做生物医学科研的同学都懂画图的煎熬:WB 条带排版、免疫荧光拼图、复杂机制通路示意图,投稿还得满足 600dpi、TIFF 格式、字体统一等严苛标准。现如今研究生做科研,绘图能力几乎是必备技能,但是 PS、专业矢量软件学习周期漫长&…

2026/9/4 21:54:02

建站公司推荐哪家?模板建站、SaaS建站和定制开发方案对比

建站公司推荐哪家?模板建站、SaaS建站和定制开发方案对比摘要:建站公司推荐哪家,要先看企业真正需要的是模板建站、SaaS建站、AI建站、开源网站服务还是定制开发。不同方案的交付方式、费用结构、维护责任和适用场景差异很大,不能…

2026/9/4 21:54:02

MySQL8.0 Windows完整安装教程

MySQL8.0 Windows完整安装教程(适配若依 RuoYi‑Vue v3.9.2)若依v3.9.2完美兼容 MySQL8.0,端口固定3306不要修改。一、下载离线安装包 官网地址 https://dev.mysql.com/downloads/installer/找到:Windows (x86, 64‑bit), MSI Ins…

2026/9/4 21:54:02

弹壳特攻队周年庆一万钥匙开箱:数据化复盘与剪辑全流程

这次我们来看“弹壳特攻队周年庆 Day 3 一万钥匙开箱纯享”这个选题。它本质上不是开源项目,也不是模型工具,而是一份游戏活动内容的数据化复盘样本。一万钥匙开箱最大的价值,在于样本量足够大、过程可以重复验证、掉落结果可以被结构化成数据…

2026/9/4 21:49:01

Spring Cloud Gateway实战:从零构建微服务API网关与避坑指南

简介:本资源是一份面向Java微服务开发者与Spring Cloud初学者的实战型网关集成方案,聚焦SpringBoot整合Gateway实现统一API路由、动态服务发现、自定义过滤器及限流熔断等核心网关能力。资源包共196个文件,含170个XML配置文件(用于…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…