美文网首页
4. 寻找两个有序数组的中位数

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

作者: 无米学炊 | 来源:发表于2019-06-23 21:38 被阅读0次

    题目

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    答案

    /**
     * @param {number[]} nums1
     * @param {number[]} nums2
     * @return {number}
     */
    var findMedianSortedArrays = function(nums1, nums2) {
        let m = nums1.length
        let n = nums2.length
        if (m > n) {
            let temp = nums1
            nums1 = nums2
            nums2 = temp
            temp = m 
            m = n
            n = temp 
        }
        let iMin = 0, iMax = m, mid = Math.floor((m + n + 1) / 2)
        while (iMin <= iMax) {
            let i = Math.floor((iMin + iMax) / 2)
            let j = mid - i
            if (i > iMin && nums1[i - 1] > nums2[j]) {
                iMax = i - 1
            } else if (i < iMax && nums1[i] < nums2[j - 1]) {
                iMin = i + 1
            } else {
                let leftMax
                if (i === 0) {
                    leftMax = nums2[j - 1]
                } else if (j === 0) {
                    leftMax = nums1[i - 1]
                } else {
                    leftMax = Math.max(nums1[i - 1], nums2[j - 1])
                }
                if ((m + n) % 2) {
                    return leftMax
                }
                
                let rightMin
                if (i === m) {
                    rightMin = nums2[j]
                } else if (j === n) {
                    rightMin = nums1[i]
                } else {
                    rightMin = Math.min(nums1[i], nums2[j])
                }
                return (leftMax + rightMin) / 2
            }
        }
        return 0
    }
    

    相关文章

      网友评论

          本文标题:4. 寻找两个有序数组的中位数

          本文链接:https://www.haomeiwen.com/subject/tknwqctx.html