4.寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2:
输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
- 思路: 只需要遍历一一半就行了,通过nums1和nums2的length 然后依次遍历,遍历到总length的一半 保存right值,在下次遍历时将left的值给right,这样的话就可以拿到遍历一半时候 left和right的值 然后判断当前的中间数是双数还是单双,从而计算出中位数
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function (nums1, nums2) {
const halfLen = (nums1.length + nums2.length) / 2
const len = Math.floor(halfLen);
let l1 = 0;
let l2 = 0;
let left = 0;
let right = 0;
debugger
for (let i = 0; i <= len; i++) {
left = right;
if(nums1.length <= l1) {
right = nums2[l2++]
continue
}else if (nums2.length <= l2) {
right = nums1[l1++]
continue
}
if(nums1[l1] > nums2[l2]) {
right = nums2[l2++]
}else {
right = nums1[l1++]
}
}
if (halfLen === len) {
return (left + right) / 2
} else {
return right
}
};