LeetCode每日一题(2020.4.9)

寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0

解答

一、利用归并排序

思路:利用归并排序,将两个有序数组合并为一个有序数组,然后根据数组长度求得中位数。

let findMedianSortedArrays = function(nums1, nums2) {
    let arr = [];
    let n1=0,n2=0,result=0;
    while(n1<nums1.length && n2<nums2.length){
        if(nums1[n1] < nums2[n2]){
            arr.push(nums1[n1++]);
        }else{
            arr.push(nums2[n2++]);
        }
    }
    while(n1<nums1.length){
        arr.push(nums1[n1++]);
    }
    while(n2<nums2.length){
        arr.push(nums2[n2++]);
    }
    let len = arr.length;
    if(len%2===0){
        result = ((arr[len/2]+arr[(len/2)-1])/2).toFixed(5);
    }else{
        result = arr[(len-1)/2].toFixed(5);
    }
    return result;
};

let a = [1,3,5];
let b = [2,3,5];

console.log(findMedianSortedArrays(a, b));

运行结果:
在这里插入图片描述

你可能感兴趣的:(#,LeetCode)