【Leetcode】4. Median of Two Sorted Arrays

发布时间:2026/11/5 3:17:45

【Leetcode】4. Median of Two Sorted Arrays 题目地址https://leetcode.com/problems/median-of-two-sorted-arrays/给定两个升序数组A AA和B BB求两个数组所有数的中位数。如果一共偶数个则取最中间的两个数的平均值。设各自的长度n nn和m mm那么如果我们解决了对任意给定的k kk找第k kk小的数这个问题就解决了。所以先考虑如何解决这个更加一般的问题。我们考虑数组A AA和B BB的各自的前k / 2 k/2k/2以下的除法都是整除个数。如果A [ k / 2 − 1 ] B [ k / 2 − 1 ] A[k/2-1]B[k/2-1]A[k/2−1]B[k/2−1]那么我们可以断言A [ 0 ] , . . . , A [ k / 2 − 1 ] A[0],...,A[k/2-1]A[0],...,A[k/2−1]一定都不是答案因为如果存在j ≤ k / 2 − 1 j\le k/2-1j≤k/2−1使得A [ j ] A[j]A[j]是第k kk小的数由于A [ k / 2 − 1 ] B [ k / 2 − 1 ] A[k/2-1]B[k/2-1]A[k/2−1]B[k/2−1]所以比A [ j ] A[j]A[j]还小的数的个数是小于等于j k / 2 − 1 k jk/2-1 kjk/2−1k的这就矛盾了。所以我们就可以将A [ 0 ] , . . . , A [ k / 2 − 1 ] A[0],...,A[k/2-1]A[0],...,A[k/2−1]舍去直接从A [ k / 2 ] A[k/2]A[k/2]开始加上B BB的所有数找第k − k / 2 k-k/2k−k/2小的数。这样就将要找第k kk小的数转变为了要找第k − k / 2 ≤ k / 2 1 k-k/2\le k/21k−k/2≤k/21小的数而且重复这种操作时k kk必然会严格下降到1 11而对于k 1 k1k1答案是显然的。如果A AA的长度是小于k / 2 k/2k/2的那么就可以直接断定B [ 0 ] , . . . , B [ k / 2 − 1 ] B[0],...,B[k/2-1]B[0],...,B[k/2−1]不可能是答案可以直接从B [ k / 2 ] B[k/2]B[k/2]开始和A AA全体中寻找答案剩下的逻辑与上面类似。代码如下classSolution{public:doublefindMedianSortedArrays(vectorintv1,vectorintv2){intnv1.size()v2.size();if(n%2)returnfind(v1,0,v2,0,n/21);elsereturn(find(v1,0,v2,0,n/2)find(v1,0,v2,0,n/21))/2.0;}intfind(vectorintv1,inti,vectorintv2,intj,intk){if(v1.size()-iv2.size()-j)returnfind(v2,j,v1,i,k);if(v1.size()i)returnv2[jk-1];if(k1)returnv1.size()i?v2[j]:min(v1[i],v2[j]);intk1min((int)v1.size()-1,ik/2-1),k2jk-(k1-i1)-1;if(v1[k1]v2[k2])returnfind(v1,k11,v2,j,k-(k1-i1));elseif(v1[k1]v2[k2])returnfind(v1,i,v2,k21,k-(k2-j1));elsereturnv1[k1];}};时间复杂度O ( log ⁡ ( m n ) ) O(\log (mn))O(log(mn))空间O ( log ⁡ k ) O(\log k)O(logk)递归栈深度。时间复杂度证明设A AA和B BB的数字个数和为N NN则T ( N , k ) T ( N − k / 2 , k / 2 ) O ( 1 ) T ( N − k / 2 − k / 4 , k / 4 ) O ( 2 ) . . . T ( N − k , 1 ) O ( log ⁡ k ) O ( log ⁡ k ) O ( log ⁡ N ) T(N,k)T(N-k/2,k/2)O(1)\\T(N-k/2-k/4,k/4)O(2)\\...T(N-k,1)O(\log k)O(\log k)O(\log N)T(N,k)T(N−k/2,k/2)O(1)T(N−k/2−k/4,k/4)O(2)...T(N−k,1)O(logk)O(logk)O(logN)极致优化classSolution{public:doublefindMedianSortedArrays(spanintv1,spanintv2){autofind[](thisautofind,spanintv1,inti,spanintv2,intj,intk)-int{intnv1.size(),mv2.size();// Compare v1[i k/2- 1], v2[j k - (k/2 - 1)]// v1[i, i 1, ..., i k/2 - 1]. k/2// v2[j, j 1, ..., j k - k/2 - 1]. k-k/2if(n-im-j)returnfind(v2,j,v1,i,k);if(in)returnv2[jk-1];if(k1)returnmin(v1[i],v2[j]);intk1min(ik/2-1,n-1);intk2jk-(k1-i1)-1;if(v1[k1]v2[k2])returnfind(v1,k11,v2,j,k-(k1-i1));elseif(v1[k1]v2[k2])returnfind(v1,i,v2,k21,k-(k2-j1));elsereturnv1[k1];};intNv1.size()v2.size();if(N%2)returnfind(v1,0,v2,0,N/21);elsereturn(find(v1,0,v2,0,N/2)find(v1,0,v2,0,N/21))/2.0;}};时空复杂度不变。
延伸阅读

更多相关文章

2026/11/5 3:17:45

【置顶帖】关于博主/关于博客/博客大事记

关于博主 ● 信息安全从业者 ● 注册信息安全认证专家资质 ● CSDN认证业界专家、安全博客专家 、全栈安全领域优质创作者 ● 【GOLF IT新治理领导力论坛】演讲嘉宾 ● 【EISS企业信息安全峰会】演讲嘉宾 ● 【CSDN隐私计算论坛】演讲嘉宾 ● 【……】演讲嘉宾(很多…

2026/11/5 3:17:45

ADS122U04IPWR与PIC18F86J10的高精度温度采集实战解析

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

2026/11/5 3:12:42

ADS122U04IPWR+STM32F429ZI工业温度采集系统设计实战

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

2026/11/5 4:17:53

政务云平台架构设计与智能运维实践

1. 政务云统筹运营建设背景解析政务云作为数字政府建设的基础设施载体,正在经历从单纯资源供给向综合服务平台的转型。过去五年间,全国省级政务云平台覆盖率已超过90%,但普遍存在资源利用率低(平均不足40%)、跨部门协同…

2026/11/5 4:17:53

UCOS-II系统时钟深度解析:从节拍到多任务调度

简介:这份资源是面向嵌入式专业学生与初学者的UCOS-II课程设计完整工程,围绕多任务调度与系统时钟展开,可用于课程实验复现、RTOS入门学习及任务管理机制的理解。压缩包共63个文件,约283KB,以35个h头文件、3个c源文件为…

2026/11/5 4:17:53

STM8S003仅剩两根空闲引脚?模拟串口救场方案

简介:这份资源面向在 IAR Embedded Workbench 下开发 STM8S003 的嵌入式工程师与学习者,针对该芯片原生物理串口资源不足的问题,给出用 PC3、PC4 引脚配合定时器软件模拟 UART 的完整工程实现,覆盖查询接收与中断接收两种模式&…

2026/11/5 4:17:52

分库分表架构下的数据管理与自动化运维实践

1. 分库分表架构下的数据管理挑战第一次接触分库分表架构时,我被一个数字震惊了——生产环境中有超过3万张分片表分布在12个数据库实例上。这就像管理一个巨型仓库,每个货架(数据库实例)上有上千个抽屉(分片表&#xf…

2026/11/5 4:17:52

校园二手交易系统MySQL数据库设计与优化实践

1. 项目概述:校园二手交易系统的数据库实践校园二手交易平台作为连接学生供需的高频场景,其数据库设计直接决定了系统的稳定性和用户体验。这个项目以MySQL为技术栈,通过DDL(数据定义语言)构建表结构,再运用DML(数据操作语言)实现…

2026/11/5 4:12:51

IWOA双目标柔性车间调度MATLAB源程序与算例

简介:面向柔性车间调度与群智能优化方向的学习者,这份MATLAB程序包围绕改进鲸鱼算法(IWOA)求解双目标调度问题展开,兼顾总完成时间、能耗或碳排放等目标的权衡。包内共17个文件,以16个.m脚本和1篇.pdf论文为…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑