leetcode - JavaScript尋找兩個正序陣列的中位數
阿新 • • 發佈:2022-03-21
題目要求:
示例一:
輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合併陣列 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5
示例二:
輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合併陣列 = [1,2,3] ,中位數 2
解題程式碼:
1 var findMedianSortedArrays = function (nums1, nums2) { 2 // concat數組合並方法合併兩個陣列 3 let arr = nums2.concat(nums1)4 // 氣泡排序 5 for (let i = 0; i < arr.length; i++) { 6 for (let j = 0; j < arr.length - i - 1; j++) { 7 if (arr[j] > arr[j + 1]) { 8 let temp 9 temp = arr[j] 10 arr[j] = arr[j + 1] 11 arr[j + 1] = temp12 } 13 } 14 } 15 // 通過陣列的長度進行判斷 16 if (arr.length % 2 === 0) { 17 // 陣列長度為偶數時 18 return (arr[(arr.length / 2)] + arr[(arr.length / 2) - 1])/2 19 } else { 20 // 陣列長度為奇數時 21 return arr[(arr.length - 1) / 2]22 } 23 } 24 // 函式呼叫 25 findMedianSortedArrays([2, 2, 4, 4], [2, 2, 4, 4])
解題心得:
需要考慮到陣列記憶體在負數的情況,可以採用氣泡排序對合並後的新陣列進行排序,再根據陣列的長度進行判斷後得到中位數的計算
對於兩個陣列的合併,也可以採用遍歷其中一個數組,再用push()方法,如下:
1 //迴圈遍歷陣列,合併陣列,返回nums1 2 for (let i = 0; i < nums2.length; i++) { 3 nums1.push(nums2[i]) 4 }
其他內容與上面程式碼一致