leetcode 第4题 寻找两个有序数组的中位数

给定两个大小为 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;
}

你可能感兴趣的:(leetcode 第4题 寻找两个有序数组的中位数)