题目描述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
题目分析
中位数是有序数组中可以把所有元素左右等分的一个元素,
如果数组元素是奇数个,正好是中间位置的元素;
如果数组元素是偶数个,则是中间2个元素的均值;
该题目给出了两个有序数组,求两个有序数组合并后的中位数。
1、合并两个有序数组
一个自然的思路是:合并两个有序数组为一个有序数组,然后通过有序数组的下标计算中间位置找到中位数。该算法需要全部遍历一遍两个有序数组,其时间复杂度和空间复杂度都是O(m+n)。
虽然可以提交本题,但是不符合题目要求的时间复杂度。
/*中位数是有序数组中可以把所有元素左右等分的一个元素,
如果数组元素是奇数个,正好是中

本文探讨了如何利用二分查找优化算法,以O(log(m+n))的时间复杂度,在给定两个正序数组中找到合并后的中位数。通过合并、技巧优化及二分查找的思想,详细展示了代码实现和思路解析。
最低0.47元/天 解锁文章
1150

被折叠的 条评论
为什么被折叠?



