Skip to content

Instantly share code, notes, and snippets.

@cashlo
Created July 22, 2018 14:59
Show Gist options
  • Save cashlo/8506b1496344543c1a1eceb7ca502cfa to your computer and use it in GitHub Desktop.
Save cashlo/8506b1496344543c1a1eceb7ca502cfa to your computer and use it in GitHub Desktop.
class Solution(object):
def find_number_after(self, nums1, nums2, left, take_numbers):
if len(nums1) + len(nums2) <= 10 or len(nums1) < 2 or not len(nums2) < 2:
jointed = []
jointed.extend(nums1)
jointed.extend(nums2)
jointed.sort()
return jointed[left:left+take_numbers]
left1 = len(nums1) * left / ( len(nums1) + len(nums2) )
left1 = max(left1, left - len(nums2) + 1)
left2 = left - left1
# print('left: {} take_numbers: {}'.format(left, take_numbers))
# print('left1: {} left2: {}'.format(left1, left2))
# print('nums1: {} nums2: {}'.format(nums1, nums2))
# print(' {} vs {}'.format(nums1[left1], nums2[left2]))
# print('========================================')
if nums1[left1] == nums2[left2]:
return [nums1[left1]]
if nums1[left1] > nums2[left2]:
return self.find_number_after(nums1[:left1+1],nums2[left2:],left-left2, take_numbers)
else:
return self.find_number_after(nums1[left1:],nums2[:left2+1],left-left1, take_numbers)
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
total_len = len(nums1) + len(nums2)
left = total_len // 2
take_numbers = 1
if total_len % 2 == 0:
left -= 1
take_numbers = 2
medians = self.find_number_after(nums1, nums2, left, take_numbers)
return float(sum(medians))/len(medians)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment