1. Merge 2 sorted list, until merged list reaches the length of the middle of sum length of 2 sorted arrays
class Solution(object): def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ nl = len(nums1) nr = len(nums2) return self.findMergedMedian(nums1, nums2, nl, nr) def findMergedMedian(self, L, R, L_n, R_n): nums = [] m1 = m2 = 0 if((L_n + R_n) % 2 == 1): m1 = (L_n + R_n) / 2 m2 = (L_n + R_n) / 2 elif((L_n + R_n) % 2 == 0): m1 = ((L_n + R_n) / 2) - 1 m2 = (L_n + R_n) / 2 i_l = 0 i_r = 0 # * 1.0 is turning int into double while(i_l < L_n and i_r < R_n): if(L[i_l] < R[i_r]): nums.append(L[i_l]) i_l += 1 else: nums.append(R[i_r]) i_r += 1 if (i_l + i_r) > m2: return (nums[m1] + nums[m2]) * 1.0 / 2 while(i_l < L_n): nums.append(L[i_l]) i_l += 1 if((i_l + i_r) > m2): return (nums[m1] + nums[m2]) * 1.0 / 2 while(i_r < R_n): nums.append(R[i_r]); i_r += 1 if((i_l + i_r) > m2): return (nums[m1] + nums[m2]) * 1.0 / 2 return (nums[m1] + nums[m2]) * 1.0 / 2
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 { ln := len(nums1) rn := len(nums2) return findMergedMedian(nums1, nums2, ln, rn)}func findMergedMedian(L []int, R[]int, L_n int, R_n int) float64 { var nums []int m1, m2, i_l, i_r := 0, 0, 0, 0 if(L_n + R_n)% 2 == 1 { m1 = (L_n + R_n) / 2 m2 = (L_n + R_n) / 2 } else { m1 = ((L_n + R_n) / 2) - 1 m2 = (L_n + R_n) / 2 } for (i_l < L_n && i_r < R_n){ if(L[i_l] < R[i_r]){ nums = append(nums, L[i_l]) i_l++ } else { nums = append(nums, R[i_r]) i_r++ } if(i_l + i_r) > m2{ return float64(nums[m1] + nums[m2]) / 2 } } for (i_l < L_n){ nums = append(nums, L[i_l]) i_l++ if(i_l + i_r) > m2{ return float64(nums[m1] + nums[m2]) / 2 } } for (i_r < R_n){ nums = append(nums, R[i_r]) i_r++ if(i_l + i_r) > m2{ return float64(nums[m1] + nums[m2]) / 2 } } return float64(nums[m1] + nums[m2]) / 2}