---
# System prepended metadata

title: '【LeetCode】Javascript - #4 Median of Two Sorted Arrays'
tags: [leetcode, javascript]

---

###### tags: `leetcode`, `javascript`
# 【LeetCode】Javascript - #4 Median of Two Sorted Arrays

---
### 題目：
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.

The overall run time complexity should be O(log (m+n)).

---

### 大概翻譯：
給定大小分別為m和n的兩個排序數組nums1和nums2，返回兩個排序數組的中值。

總體運行時複雜度應為O（log（m+n））。

---
例如：
```javascript=
Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.

Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
```

---

```javascript=

var findMedianSortedArrays = function(nums1, nums2) {
    return median(nums1,nums2);
};

const median = (nums1, nums2) => {
    const nums1Size = nums1.length;
    const nums2Size = nums2.length;

    // 先檢查給定數組中是否有一個為空，如果是，則返回另一個數組的中值
    if(nums1Size === 0){
        return nums2Size % 2 !== 0 ? nums2[nums2Size/2 - 0.5] : (nums2[nums2Size/2 - 1] + nums2[nums2Size/2]) / 2;
    }
    if(nums2Size === 0){
        return nums1Size % 2 !== 0 ? nums1[nums1Size/2 - 0.5] : (nums1[nums1Size/2 - 1] + nums1[nums1Size/2]) / 2;
    }

    // 檢查兩個數組大小之和是否小於2
    // 如果為true，檢查分佈並返回中值
    if(nums1Size + nums2Size <= 2){  	    
        if(nums1Size && nums2Size){
            return (nums1[0] + nums2[0]) / 2;
        }
        else{
            return nums1Size > 0 ? nums1[0]: nums2[0] ;
        }        
    }    
    
    // 如果上述規則都不成立，只需删除兩個組合數組的最高值和最低值，並使用生成的2個數組遞迴地再次調用該函數。
    let nums1max = nums1[nums1Size-1];
    let nums2max = nums2[nums2Size-1];
    nums1[0] > nums2[0] ? nums2.shift() : nums1.shift(); 
    nums1max > nums2max ? nums1.pop() : nums2.pop();              
        
    return median(nums1,nums2);  
};
```

---

*新手工程師的筆記，純粹記錄學了些啥東西
如果有前輩高人讀了我的文，文中有任何錯誤再麻煩指教指教*