1. 程式人生 > >Lintcode 65. Median of two Sorted Arrays (Python) (Hard)

Lintcode 65. Median of two Sorted Arrays (Python) (Hard)

Median of two Sorted Arrays

Description:

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays.

Example Given A=[1,2,3,4,5,6] and B=[2,3,4,5], the median is 3.5.

Given A=[1,2,3] and B=[4,5], the median is 3.

Challenge The overall run time complexity should be O(log (m+n)).

Code:

class Solution:
    """
    @param: A: An integer array
    @param: B: An integer array
    @return: a double whose format is *.5 or *.0
    """
    def findMedianSortedArrays(self, A, B):
        # write your code here
        le = len(A)+len(B)
        if le%2==0:
            print('even')
            print
('left', self.findK(A,B,int(le/2))) print('right', self.findK(A,B,int(le/2)+1)) return (self.findK(A,B,int(le/2))+self.findK(A,B,int(le/2)+1))/2 else: return self.findK(A,B,int(le/2)+1) def findK(self, A, B, k): la, lb = len(A), len(B) halfk =
int(k/2) print('halfk', k, halfk) if la<lb: return self.findK(B, A, k) if lb == 0: return A[k-1] if k==1: return min(A[0], B[0]) ib = min(lb, halfk) if halfk!=0 else 1 ia = k-ib if k-ib!=0 else 1 print('ia,ib',ia,ib) if B[ib-1]==A[ia-1]: return B[ib-1] if B[ib-1]<A[ia-1]: if lb==ib: return A[ia-1] return self.findK(A[:ia], B[ib:], ia) if B[ib-1]>A[ia-1]: if la==ia: return B[ib-1] return self.findK(A[ia:], B[:ib], ib)