###### 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); }; ``` --- *新手工程師的筆記,純粹記錄學了些啥東西 如果有前輩高人讀了我的文,文中有任何錯誤再麻煩指教指教*