leetcod
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3]
nums2 = [2]The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]The median is (2 + 3)/2 = 2.5
Your runtime beats 45.71% of javascriptsubmissions.
这道题,借用了归并排序的算法。虽然归并排序是分治算法, 但是暂时没有理解为什么这道题标注分治算法。
本来判断有没有溢出其实蛮不开心的,后来发现放了所谓的哨兵,这样代码逻辑就开心一点了。 另外用把中位数存起来这点也是不错的。
/**
* @param {number[]} nums1
* @param {nu nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
var l1 = nums1.length;
var l2 = nums2.length;
var sum = l1+l2;
var odd_flag = true;
if(sum%2===0){
odd_flag = false;
}
mm = Math.floor((sum-1)/2);
var i = 0;
var j=0;
var k=0;
var median = Number.NEGATIVE_INFINITY;
var save_mid = [];
nums1.push(Number.POSITIVE_INFINITY);
nums2.push(Number.POSITIVE_INFINITY);
var res_flag = true;
while(i<=mm+1){
var front_flag = nums1[j]<nums2[k];
if(front_flag){
if(i>=mm){
save_mid.push(nums1[j]);
}
j=j+1;
}else{
if(i>=mm){
save_mid.push(nums2[k]);
}
k = k+1;
}
i++;
}
if(odd_flag){
return save_mid[0];
}else{
return (save_mid[0]+save_mid[1])/2;
}
};