Skip to content

Latest commit

 

History

History
60 lines (48 loc) · 1.6 KB

0004-寻找两个正序数组的中位数.md

File metadata and controls

60 lines (48 loc) · 1.6 KB

给定两个大小为 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

第一次解题

  var findMedianSortedArrays = function(nums1, nums2) {
    const nums = [].concat(nums1, nums2).sort((a, b) => a - b)
    if (nums.length === 1) {
        return nums[0]
    }
    const mid = nums.length / 2
    let even = mid % 1 === 0
    if (even) {
        return (nums[mid - 1] + nums[mid]) / 2
    }
    return nums[Math.floor(mid)]
};

解题思路 先合并2个数组然后排序,判断中位数下标是否是偶数,是偶数则返回中位数与进位下标的和除以2,奇数则直接向下取整返回下标值。 但是由于使用了sort方法,v8引擎中sort方法是使用快排实现的,也就是nlogn级别的时间复杂度 所以总结下来时间复杂度为(m + n)log(m + n)级别,并未实现进阶目标。 于是查看题解发现 需要使用二分法来做