給定兩個大小分別為 m 和 n 的正序(從小到大)數(shù)組 nums1 和 nums2。請你找出并返回這兩個正序數(shù)組的 中位數(shù) 。
示例 1:
輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合并數(shù)組 = [1,2,3] ,中位數(shù) 2
示例 2:
輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合并數(shù)組 = [1,2,3,4] ,中位數(shù) (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
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
思路一:
我們還是從最容易想到的方法開始。把兩個數(shù)組合并,并且按從小到大排序。如果數(shù)組長度是偶數(shù),那返回中間兩位的平均數(shù),如果數(shù)組長度是奇數(shù),那中間那一位就是中位數(shù)。
代碼實(shí)現(xiàn):
var findMedianSortedArrays = function(nums1, nums2) {
const combinedArray = nums1.concat(nums2);
if (combinedArray.length === 1) {
return combinedArray[0];
}
combinedArray.sort((a,b) => {return a-b});
const arrayLength = combinedArray.length;
if (arrayLength % 2 === 0) {
const middle = combinedArray.length / 2;
return (combinedArray[middle-1] + combinedArray[middle]) / 2;
}
const middle = Math.floor(combinedArray.length / 2);
return combinedArray[middle]
};
思路二:
其實(shí)題目已經(jīng)說明了兩個數(shù)組都是有序的,那我們按上面的解法組合再去重新排序就有點(diǎn)浪費(fèi)體力了。
今天太晚了,明天再更思路二