Leetcode : Median of Two Sorted Arrays

本文介绍了一种使用二分查找算法解决在两个有序数组中找到中位数的问题的方法,此方法可扩展至查找第K个元素,满足O(log(m+n))的时间复杂度要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

做这题花了四个小时,学习到了使用二分查找,代码可以扩展至“在两个有序数组中找到第K个元素”。

因为有O(log(m+n))的要求,我们不能简单使用扫描数组然后取中位数的形式,这要求我们使用复杂度为log(n) 的二分查找。

梳理题目条件:不考虑特殊情况,且假设nums1 元素个数 小于 nums2,nums1 有n1个元素, nums2有n2个元素,k为 (n1 + n2 + 1) / 2,若数组为偶数个,则中位数为C[k-1],若为奇数个, 则中位数为C[k-1]和C[k] 取平均数。

我们从nums1中取m1个元素,nums2中自然取m2个元素,使得m1 + m2 = k 成立,其中k为 (n1 + n2 + 1) / 2。

二分查找要找的数应当是下图中最小的m1, 使得A[m1] > B[m2 - 1]。理由是: A[m1] 是nums1中下一个将被取到的数,B[m2 - 1] 是 nums2中最后一个取到的数,如果小了,说明nums1还要多取。

 

 

 

 

用例子来说明

 

代码:https://github.com/chy996633/leetcode/blob/master/src/MedianOfTwoSortedArrays.java 

 

转载于:https://www.cnblogs.com/andrew-chen/p/10160599.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值