是数学!
作为一个学渣,从初中以后数学就一直是不及格的存在,虽然只有很个别的时间里才能抓到那种思路涌现,天人合一的感觉,但我知道世界上一定存在这样一种东西能让你自然而然的找到问题的解法,而他们就藏在你过往的练习记忆中…
var findMedianSortedArrays = function(nums1, nums2) {
var m = nums1.length,
n = nums2.length;
if(m>n){ //保持查询最小的
return findMedianSortedArrays(nums2,nums1);
}
var begin = 0 , end = 2*m; // 把原数组放大二倍可保证始终为偶
var mCut ,nCut;
var res;
var nMin,nMax,mMin,mMax;
while(begin<=end){//二分查找
mCut = parseInt((begin+end) / 2);
nCut = (m+n) - mCut; // (m*2+n*2)/2-mCut实际应该为
mMax = (mCut != 2 * m) ? nums1[parseInt(mCut / 2)] : Number.MAX_VALUE; //切在了短数组的最后一位,则短数组提供小的数为数组最后一个元素,大的数为假象值,要保证大的数不被取到,所以为无限大
mMin = (mCut != 0) ? nums1[parseInt((mCut - 1) / 2)] : - Number.MAX_VALUE;//切在了短数组的弟一位,则短数组提供小的数为假想值,大的数为第一个元素,要保证假想值不被取到,所以为无限小
nMax = (nCut != 2 * n) ? nums2[parseInt(nCut / 2)] : Number.MAX_VALUE;
nMin = (nCut != 0) ? nums2[parseInt((nCut - 1) / 2)] : - Number.MAX_VALUE;
if(mMin>nMax){//跟进结果进行继续进行二分查找
end = mCut-1;
} else if(nMin>mMax){
begin = mCut+1;
}else{
break;
}
}
return (Math.min(mMax,nMax) + Math.max(nMin,mMin))/ 2
};最后更新于


