LeetCode 第 4 號問題:尋找兩個正序數組的中位數

LeetCode 第 4 號問題:尋找兩個正序數組的中位數

題目地址

https://leetcode-cn.com/problems/median-of-two-sorted-arrays/

題目描述

給定兩個大小爲 m 和 n 的正序(從小到大)數組 nums1 和 nums2。

請你找出這兩個正序數組的中位數,並且要求算法的時間複雜度爲 O(log(m + n))。

你可以假設 nums1 和 nums2 不會同時爲空。

示例 1:

nums1 = [1, 3]
nums2 = [2]

則中位數是 2.0
示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

則中位數是 (2 + 3)/2 = 2.5

思路

暴力解決方法:拼接後找中位數

代碼一

const findMedianSortedArrays = function(nums1, nums2) {
    let arr=nums1.concat(nums2)// 合併兩個數組
    arr.sort((a, b) => a - b)// 新數組從小到大排序
    let length = arr.length
    if(length%2==0){
        /**
         * 數組長度爲偶數,輸出中間兩數之和的平均值
        */
        return (arr[length/2]+arr[length/2-1])/2
    }else{
        /**
         * 數組長度爲奇數,輸出中間數
        */
        return arr[(length-1)/2]
    }
};

代碼二

代碼最少的方法,時間複雜度爲O((m + n)log(m + n))

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
const findMedianSortedArrays = function(nums1, nums2) {
    const arr = [...nums1, ...nums2].sort((a, b) => a - b);
    const { length } = arr;
    return length % 2 ? arr[Math.floor(length / 2)] : (arr[length / 2] + arr[length / 2 - 1]) / 2;
}

LeetCode 第 4 號問題:尋找兩個正序數組的中位數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章