1. 程式人生 > 其它 >leetcode - JavaScript尋找兩個正序陣列的中位數

leetcode - JavaScript尋找兩個正序陣列的中位數

題目要求:

 
示例一:
輸入: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] = temp
12 } 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         }

  其他內容與上面程式碼一致