leetcode python 004

##  已知l1,l2均为升序数组,
##  在两数组l1,l2中寻找第n位数,
##  两数组中位数中,前者大于后者,说明后者中位数以下的成员必定在真正中位数之下
##  可以将其剔除,剔除a个元素后的两数组中寻找第n-a位数,等价于
def findmid(l1,l2):
    m,n=len(l1),len(l2)
    if (m+n)%2==0:
        return  (listrec(l1,l2,(m+n)/2)+listrec(l1,l2,(m+n)/2))/2
    else:
        return listrec(l1,l2,(m+n+1)/2)
## la长度大于等于lb
def listrec(la,lb,i):
    m,n=len(la),len(lb)
    if n==0:
        return la[i-1]
    if m<n:
        return listrec(lb,la,i)
    if i==1:
        return min(la[0],lb[0])
    p=min(int(i/2),n)
    print(m,n,i,p)
    if la[p-1]>lb[-1]:
        return listrec(la,lb[p:],i-p)
    else:
        return listrec(la[p:],lb,i-p)

lm=[x for x in range(13,200)if x%2==0]
ln=[x for x in range(15,99)if x%2==1]
print(findmid(lm,ln))

----蚂蚁不在线
原文地址:https://www.cnblogs.com/offline-ant/p/9365910.html