1. Merge 2 sorted list, until merged list reaches the length of the middle of sum length of 2 sorted arrays

  1. class Solution(object):
  2. def findMedianSortedArrays(self, nums1, nums2):
  3. """
  4. :type nums1: List[int]
  5. :type nums2: List[int]
  6. :rtype: float
  7. """
  8. nl = len(nums1)
  9. nr = len(nums2)
  10. return self.findMergedMedian(nums1, nums2, nl, nr)
  11. def findMergedMedian(self, L, R, L_n, R_n):
  12. nums = []
  13. m1 = m2 = 0
  14. if((L_n + R_n) % 2 == 1):
  15. m1 = (L_n + R_n) / 2
  16. m2 = (L_n + R_n) / 2
  17. elif((L_n + R_n) % 2 == 0):
  18. m1 = ((L_n + R_n) / 2) - 1
  19. m2 = (L_n + R_n) / 2
  20. i_l = 0
  21. i_r = 0
  22. # * 1.0 is turning int into double
  23. while(i_l < L_n and i_r < R_n):
  24. if(L[i_l] < R[i_r]):
  25. nums.append(L[i_l])
  26. i_l += 1
  27. else:
  28. nums.append(R[i_r])
  29. i_r += 1
  30. if (i_l + i_r) > m2:
  31. return (nums[m1] + nums[m2]) * 1.0 / 2
  32. while(i_l < L_n):
  33. nums.append(L[i_l])
  34. i_l += 1
  35. if((i_l + i_r) > m2):
  36. return (nums[m1] + nums[m2]) * 1.0 / 2
  37. while(i_r < R_n):
  38. nums.append(R[i_r]);
  39. i_r += 1
  40. if((i_l + i_r) > m2):
  41. return (nums[m1] + nums[m2]) * 1.0 / 2
  42. return (nums[m1] + nums[m2]) * 1.0 / 2
  1. func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
  2. ln := len(nums1)
  3. rn := len(nums2)
  4. return findMergedMedian(nums1, nums2, ln, rn)
  5. }
  6. func findMergedMedian(L []int, R[]int, L_n int, R_n int) float64 {
  7. var nums []int
  8. m1, m2, i_l, i_r := 0, 0, 0, 0
  9. if(L_n + R_n)% 2 == 1 {
  10. m1 = (L_n + R_n) / 2
  11. m2 = (L_n + R_n) / 2
  12. } else {
  13. m1 = ((L_n + R_n) / 2) - 1
  14. m2 = (L_n + R_n) / 2
  15. }
  16. for (i_l < L_n && i_r < R_n){
  17. if(L[i_l] < R[i_r]){
  18. nums = append(nums, L[i_l])
  19. i_l++
  20. } else {
  21. nums = append(nums, R[i_r])
  22. i_r++
  23. }
  24. if(i_l + i_r) > m2{
  25. return float64(nums[m1] + nums[m2]) / 2
  26. }
  27. }
  28. for (i_l < L_n){
  29. nums = append(nums, L[i_l])
  30. i_l++
  31. if(i_l + i_r) > m2{
  32. return float64(nums[m1] + nums[m2]) / 2
  33. }
  34. }
  35. for (i_r < R_n){
  36. nums = append(nums, R[i_r])
  37. i_r++
  38. if(i_l + i_r) > m2{
  39. return float64(nums[m1] + nums[m2]) / 2
  40. }
  41. }
  42. return float64(nums[m1] + nums[m2]) / 2
  43. }