Problem Statement
(Source: Leetcode Problem 4: Median of Two Sorted Arrays [Hard])
(Topics: [Array] [Binary Search] [Divide and Conquer])
Given two sorted arrays
nums1
andnums2
of sizem
andn
respectively, return the median of the two sorted arrays.The overall time complexity should be
O(log(m+n))
.
I was able to solve this problem with the following code:
def findMedianSortedArrays(self, nums1, nums2):
nums = nums1 + nums2
nums.sort()
if len(nums) % 2 == 0:
return (nums[(len(nums) / 2) - 1] + nums[len(nums) / 2]) / 2.0
else:
return nums[len(nums) // 2]
which has a time complexity of \$O((m+n)\log(m+n))\$ and space complexity of \$O(m+n)\$.
Admittedly while I didn't find the problem too difficult overall, I do want to still try to improve the time complexity of my code to at least \$O(\log(m+n))\$.
My question is:
What am I misunderstanding about the approach needed to make the code run in \$O(\log(m+n))\$ time?
Edit
Per toolic's suggestion, I have modified the code to run on newer versions of Python (of course also using snake_case
to write function names for readability). I used this online Python editor to test my fixes:
def find_median_two_sorted_arrays(nums1: list, nums2: list):
nums = nums1 + nums2
nums.sort
if len(nums) % 2 == 0:
return (nums[(len(nums) // 2) - 1] + nums[len(nums) // 2]) / 2.0
else:
return nums[len(nums) // 2]
Note: I would like to say that I know (after doing some research) that this can be done in \$O(\log(\min(n,m)))\$ time complexity with \$O(1)\$ space complexity. However, this is not what I want as this is admittedly very out of my reach with my understanding of Python.