Median of Two Sorted Arrays

2018-05-21  本文已影响0人  斯特莫

转化成寻找第k个最小值

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    let total = nums1.length + nums2.length;
    if(total%2==0){
        return (findKth(nums1, 0, nums2, 0, total/2) + findKth(nums1, 0, nums2, 0, total/2 + 1))/2
    }else{
        return findKth(nums1, 0, nums2, 0, (total+1)/2)
    }
    
};
function findKth(a, m, b, n, k){
    if(m > a.length - 1){
        return b[n+k-1]
    }
    if(n > b.length - 1){
        return a[m+k-1]
    }
    if(k==1){
        return Math.min(a[m], b[n])
    }
//如果k/2超过了其中一个array, 那第k个最小值一定不再另一个array的前k/2
    let pa = parseInt(k/2) + m <= a.length ? a[parseInt(k/2) + m-1]:Number.MAX_VALUE;
    let pb = parseInt(k/2) + n <= b.length ? b[parseInt(k/2) + n-1]:Number.MAX_VALUE;
    if(pa>pb){
        return findKth(a, m, b, n+parseInt(k/2), k-parseInt(k/2))
    } else {
        return findKth(a, m+parseInt(k/2), b, n, k-parseInt(k/2))
    }
}
上一篇 下一篇

猜你喜欢

热点阅读