Skip to main content

4. 寻找两个正序数组的中位数

给定两个大小分别为 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

答案

思路:

  1. 合并数组并排序 num3

  2. 声明中位数 mid

  3. 判断新数组的长度

    • 为偶数:[1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
     let a=nums3.length/2
    mid=((nums3[a-1]+nums3[a])/2).toFixed(5)
    • 为奇数:
     let a = Math.floor(nums3.length/2);
    mid=nums3[a].toFixed(5)
var findMedianSortedArrays = function(nums1, nums2) {
// 合并数组
nums3=nums1.concat(nums2).sort((a,b)=>a-b)
// 中位数
let mid=0

if(nums3.length%2==0){
// 中数位偶数
let a=nums3.length/2
mid=((nums3[a-1]+nums3[a])/2).toFixed(5)
return mid
}else{
// 中数位奇数
let a=Math.floor(nums3.length/2);
mid=nums3[a].toFixed(5)
return mid
}
};

var nums1 = [1,2], nums2 = [3,4]

console.log(findMedianSortedArrays(nums1,nums2))