给定两个大小为 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 l1 = nums1.length
let l2 = nums2.length
if(l1 === 0){
if(l2 === 1) return nums2[0]
return l2 % 2 === 0
? (nums2[(l2 >> 1) -1] + nums2[l2>>1]) / 2
: nums2[l2 >> 1]
}else if(l2 === 0){
if(l1 === 1) return nums1[0]
return l1 % 2 === 0
? (nums1[(l1>>1) -1] + nums1[l1>>1]) / 2
: nums1[l1>>1]
}
if(l1+l2 === 2) return (nums1[0] + nums2[0]) /2
let arr = []
let len = ((l1+l2) >> 1) + 1
let l =r = 0
for(let i = 0; i< len; i++){
if(r > l2-1 || nums1[l] <= nums2[r]){
arr.push(nums1[l])
l++
}else{
arr.push(nums2[r])
r++
}
}
// return arr[1]
return (l1 + l2) % 2 === 0
? (arr[len - 1] + arr[len - 2]) / 2
: arr.pop()
};
作者:malin-code
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/jszui-you-jie-bu-fu-lai-bian-by-malin-code/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。