From a1931aa1983b5f2e2e35c82478f04219de92a944 Mon Sep 17 00:00:00 2001 From: Anirban Saha <56464099+Anirbansaha007@users.noreply.github.com> Date: Wed, 19 Oct 2022 14:00:50 +0530 Subject: [PATCH] Solved a leetcode question in python --- median_of_two_sorted_array.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 median_of_two_sorted_array.py diff --git a/median_of_two_sorted_array.py b/median_of_two_sorted_array.py new file mode 100644 index 0000000..19c4feb --- /dev/null +++ b/median_of_two_sorted_array.py @@ -0,0 +1,27 @@ +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + # https://discuss.leetcode.com/topic/16797/very-concise-o-log-min-m-n-iterative-solution-with-detailed-explanation + ls1, ls2 = len(nums1), len(nums2) + if ls1 < ls2: + return self.findMedianSortedArrays(nums2, nums1) + l, r = 0, ls2 * 2 + while l <= r: + mid2 = (l + r) >> 1 + mid1 = ls1 + ls2 - mid2 + L1 = -sys.maxint - 1 if mid1 == 0 else nums1[(mid1 - 1) >> 1] + L2 = -sys.maxint - 1 if mid2 == 0 else nums2[(mid2 - 1) >> 1] + R1 = sys.maxint if mid1 == 2 * ls1 else nums1[mid1 >> 1] + R2 = sys.maxint if mid2 == 2 * ls2 else nums2[mid2 >> 1] + if L1 > R2: + l = mid2 + 1 + elif L2 > R1: + r = mid2 - 1 + else: + return (max(L1, L2) + min(R1, R2)) / 2.0 + + +if __name__ == '__main__': + # begin + s = Solution() + print s.findMedianSortedArrays([1, 1], [1, 2]) +