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
题解:合并数组
- 1.双指针按顺序合并数组 2.分两种情况找中位数
var findMedianSortedArrays = function(nums1, nums2) {
//1.按顺序合并数组 2.找中位数
let i=0,j=0;
const nums=[];
while(i<nums1.length && j< nums2.length){//两个指针分别对应两个数组
if(nums1[i]<=nums2[j]){//小的放进总数组
nums.push(nums1[i])
i++
}else{
nums.push(nums2[j])
j++
}
}
while(i<nums1.length){//只剩nums1数组有元素
nums.push(nums1[i])
i++
}
while(j<nums2.length){//只剩nums1数组有元素
nums.push(nums2[j])
j++
}
const n =nums.length
if(n%2==0){//数组长度为偶数,中间有两个值
const mid1 = nums[n/2-1]
const mid2 = nums[n/2]
return (mid1+mid2)/2
}else{//中位数只有中间一个数
const mid=Math.floor(n/2)
return nums[mid]
}
};
浙公网安备 33010602011771号