题目描述 - 寻找两个正序数组的中位数
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n))
。
思路分析
一个正序数组的中位数即数组中间的元素, 分两种情况:
- 若数组长度为偶数, 中位数为中间两个元素之和除二, 如:
arr = [1,2,3,4]
, 中位数为 2.5。代码表示为:(arr[arr.length/2] + arr[arr.length/2 - 1]) / 2
- 若数组长度为奇数, 中位数为中间的元素,如:
arr = [1,2,3]
, 中位数为 2。代码表示为:(arr[Math.floor(arr.length/2)])
求两个正序数组的中位数, 讲两个有序数组合并为一个有序数组,并按照上面的逻辑寻找中位数即可, 代码如下:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
let tempArr = nums1.concat(nums2)
tempArr.sort((a,b)=> a-b)
let length = tempArr.length;
if(length % 2 === 0){
return (tempArr[length / 2 -1] + tempArr[length / 2]) / 2
}else{
return tempArr[Math.floor(length / 2)]
}
};