给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
解题思路:
将两个有序数组合并成一个有序数组,既可以快速找到对应的中位数了
解题代码如下:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
var arr = mergeArray(nums1, nums2);
var length = arr.length;
if (length % 2 == 0)
return (arr[parseInt(length / 2 -1)] + arr[parseInt(length / 2)]) / 2.0
else
return arr[parseInt(length / 2)];
};
// 合并有序数组
var mergeArray = function(nums1, nums2) {
var mergeArr = [];
var length = nums1.length + nums2.length;
var index = 0;
var leftIndex = 0;
var rightIndex = 0;
while (index < length)
{
// 当左边数组合并完
if(leftIndex >= nums1.length)
{
mergeArr = mergeArr.concat(nums2.slice(rightIndex, nums2.length));
index = length;
}
// 当右边数组合并完
else if (rightIndex >= nums2.length)
{
mergeArr = mergeArr.concat(nums1.slice(leftIndex, nums1.length));
index = length;
}
else if (nums1[leftIndex] <= nums2[rightIndex])
{
mergeArr.push(nums1[leftIndex]);
leftIndex++;
index++;
}
else if (nums1[leftIndex] > nums2[rightIndex])
{
mergeArr.push(nums2[rightIndex]);
rightIndex++;
index++;
}
}
return mergeArr;
}