4. 寻找两个正序数组的中位数

151 阅读1分钟

一、题目描述:

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

示例 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

提示:
  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -10^6 <= nums1[i], nums2[i] <= 10^6

二、思路分析:

思路:

首先要注意一下中位数概念:正中间的数,如果没有就求中间两个数的平均数。两个数组首先先使用concat拼成一个数组,然后sort排序。最后判断中间是一位数还是两位,一位直接返回,两位求其平均数。


三、AC 代码:

方法一:

function findMedianSortedArrays(nums1: number[], nums2: number[]): number {
  let arr: number[] = nums1.concat(nums2);
  arr.sort((a, b) => a - b);
  let center = Math.floor(arr.length / 2);
  if (arr.length % 2) {
    return arr[center];
  }
  return (arr[center - 1] + arr[center]) / 2;
}

四、总结:

此题具有很大的优化空间。

题目来源:leetcode。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情