1.寻找两个有序数组的中位数
题目:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
解题思路:二分查找
1.当两个数组的长度之和为奇数的时候,中位数只有1个,将它返回;
2.当两个数组的长度之和为偶数的时候,中位数有2个,将回合并、排序以后位于中间的两个数的平均数。
中位数:在有两个有序数组的时候,任然可以把两个数组分割成两部分
在使用一条分割线把两个数组分割成两部分:
1.红线左边和右边的元素个数相等,或者左边元素的个数比右边元素的个数多一个;
2.红线左边的所有元素的数值<=红线右边的所有元素的数值。
当两个数组的元素个数之和为奇数的时候,有:size(left)=size(right)+1
当两个数组的元素的个数之和为偶数的时候,有:size(left)=size(right)
假设数组1的长度为m,假设数组2的长度为n.
当m+n为偶数的时候,size(left)=(m+n)/2=(m+n+1)/2
当m+n为奇数的时候,假设中位数被分到左边,size(left)=(m+n+1)/2
把以上两种方法合并,size(left)=(m+n+1)/2
复杂度分析
时间复杂度:O(log min(m,n)),这里m和n分别为数组nums1和nums2的长度。
空间复杂度:O(1),只使用到常数个变量。