转化成寻找第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))
}
}
网友评论