题目描述
给定两个大小分别为 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 示例 3:
输入:nums1 = [0,0], nums2 = [0,0] 输出:0.00000 示例 4:
输入:nums1 = [], nums2 = [1] 输出:1.00000 示例 5:
输入:nums1 = [2], nums2 = [] 输出:2.00000
提示:
nums1.length == m nums2.length == n 0 <= m <= 1000 0 <= n <= 1000 1 <= m + n <= 2000 -106 <= nums1[i], nums2[i] <= 106
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/me… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路
- 合并数组并升序排序返回排序后的数组。
- 排序后的数组元素个数为奇数,则中位数为中间位置的元素。
- 排序后的数组元素个数为偶数,则中位数为中间位置左右两边的数的平均数。
题解代码
/*
* @lc app=leetcode.cn id=4 lang=javascript
*
* [4] 寻找两个正序数组的中位数
*/
// @lc code=start
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
let res = nums1.concat(nums2).sort(function(a,b){return a-b});
//排序后的数组元素个数为奇数,则中位数为中间位置的元素。
//排序后的数组元素个数为偶数,则中位数为中间位置左右两边的数的平均数。
if (res.length % 2 !== 0) {
return res[Math.floor(res.length/2)];
}else{
return (res[Math.floor(res.length/2) - 1] + res[Math.floor(res.length/2)])/2
}
};
// @lc code=end