leetcode-——腾讯 求中位数(python3)

首先介绍一下简单的合并有序列表的方法:

nums1=[1,2]
nums2=[3,4]
self=[]
def findMedianSortedArrays(self, nums1, nums2 ) -> float:
    i = len(nums1)
    j = len(nums2)
    p = i if i < j else j
    n = i + j
    arr = [0 for x in range(0, n)]
    m = h = q = 0
    while (h < i) & (q < j):
        if nums1[h] > nums2[q]:
            arr[m] = nums2[q]
            m = m + 1
            q = q + 1
        else:
            arr[m] = nums1[h]
            m = m + 1
            h = h + 1
    if h < i:
        for t in range(h, i):
            arr[m] = nums1[t]
            m = m + 1
    if q < j:
        for r in range(q,j):
            arr[m] = nums2[r]
            m = m + 1
    l =len(arr)
    if l%2!=0:
      return arr[int(l/2)+1]
    else:
      return (arr[int(l/2)]+arr[int(l/2)-1])/2
print(findMedianSortedArrays(self,nums1,nums2))

结果:
在这里插入图片描述
二分改进:(这里的二分是对排列顺序个数的二分,而不是对大小进行二分

import sys
sys.setrecursionlimit(10000)
nums1=[1,2]
nums2=[3,4]
self=[]
def getmax(nums1,start1,nums2,start2,k) -> float:
    if(start1>len(nums1)-1):
        return nums2[start2+k-1]
    if(start2>len(nums2)-1):
        return nums1[start1+k-1]
    if(k==1):
        return nums1[start1] if nums1[start1]<nums2[start2] else nums2[start2]
    nums1mid = nums1[start1+int(k/2)-1] if (start1+int(k/2)-1<len(nums1)) else float('inf')
    nums2mid = nums2[start2 + int(k / 2) - 1] if (start2 + int(k / 2) - 1 < len(nums2)) else float('inf')
    if(nums1mid<nums2mid):
        return (getmax(nums1,start1+int(k/2),nums2,start2,k-int(k/2)))
    else:
        return (getmax(nums1,start1,nums2,start2+int(k/2),k-int(k/2)))
def findMedianSortedArrays(self, nums1, nums2 ) -> float:
    m = len(nums1)
    n = len(nums2)
    l = (m+n+1)/2
    r = (m+n+2)/2
    return (getmax(nums1,0,nums2,0,l))+getmax(nums1,0,nums2,0,r)/2.0

# def findMedianSortedArrays(self, nums1, nums2 ) -> float:
#
#     i = len(nums1)
#     j = len(nums2)
#     p = i if i < j else j
#     n = i + j
#     arr = [0 for x in range(0, n)]
#     m = h = q = 0
#     while (h < i) & (q < j):
#         if nums1[h] > nums2[q]:
#             arr[m] = nums2[q]
#             m = m + 1
#             q = q + 1
#         else:
#             arr[m] = nums1[h]
#             m = m + 1
#             h = h + 1
#     if h < i:
#         for t in range(h, i):
#             arr[m] = nums1[t]
#             m = m + 1
#     if q < j:
#         for r in range(q,j):
#             arr[m] = nums2[r]
#             m = m + 1
#     l =len(arr)
#     if l%2!=0:
#       return arr[int(l/2)+1]
#     else:
#       return (arr[int(l/2)]+arr[int(l/2)-1])/2
print(findMedianSortedArrays(self,nums1,nums2))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聆一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值