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.双指针按顺序合并数组 2.分两种情况找中位数
var findMedianSortedArrays = function(nums1, nums2) {
    //1.按顺序合并数组 2.找中位数
    let i=0,j=0;
    const nums=[];
    while(i<nums1.length && j< nums2.length){//两个指针分别对应两个数组
        if(nums1[i]<=nums2[j]){//小的放进总数组
            nums.push(nums1[i])
            i++
        }else{
            nums.push(nums2[j])
            j++
        }
    }
    while(i<nums1.length){//只剩nums1数组有元素
        nums.push(nums1[i])
            i++
    }
    while(j<nums2.length){//只剩nums1数组有元素
        nums.push(nums2[j])
            j++
    }
    const n =nums.length
    if(n%2==0){//数组长度为偶数,中间有两个值
        const mid1 = nums[n/2-1]
        const mid2 = nums[n/2]
        return (mid1+mid2)/2
    }else{//中位数只有中间一个数
        const mid=Math.floor(n/2)
        return nums[mid]
    }
};
posted @ 2025-03-07 09:34  Frommoon  阅读(10)  评论(0)    收藏  举报