[路飞]_LeetCode题4寻找两个正序数组的中位数

162 阅读1分钟

题目描述

给定两个大小分别为 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… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  1. 合并数组并升序排序返回排序后的数组。
  2. 排序后的数组元素个数为奇数,则中位数为中间位置的元素。
  3. 排序后的数组元素个数为偶数,则中位数为中间位置左右两边的数的平均数。

题解代码

/*
 * @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