4. Median of Two Sorted Arrays
Leetcode
題目
解題
解答
解法 1
var findMedianSortedArrays = function(nums1, nums2) {
const m = nums1.length;
const n = nums2.length;
const pTotal = Math.floor((m + n + 1) / 2);
// 處理最前及最後元素的邊界狀況
nums1[-1] = Number.MIN_SAFE_INTEGER;
nums1[m] = Number.MAX_SAFE_INTEGER;
nums2[-1] = Number.MIN_SAFE_INTEGER;
nums2[n] = Number.MAX_SAFE_INTEGER;
let low = 0;
let high = m;
while (low <= high) {
const p1 = Math.floor((low + high) / 2);
const p2 = pTotal - p1;
if (nums1[p1 - 1] <= nums2[p2] && nums2[p2 - 1] <= nums1[p1]) {
const isEven = (m+n) % 2 === 0
if (isEven) {
const left = Math.max(nums1[p1 - 1], nums2[p2 - 1]);
const right = Math.min(nums1[p1], nums2[p2]);
return (left + right) / 2;
} else {
return Math.max(nums1[p1 - 1], nums2[p2 - 1]);
}
}
// 如果 nums1 的長度比較長,p2 計算出來有可能是負的
if (nums1[p1 - 1] > nums2[p2] || p2 < 0) {
high = p1 - 1;
continue;
}
if (nums2[p2 - 1] > nums1[p1] || p2 > n) {
low = p1 + 1;
continue;
}
}
};解法二 (以長度較短的矩陣進行二分搜尋)
測資
參考資料
Last updated