2020-07-29_leetcode_寻找两个正序数组的中位数

方法一:

采用归并排序部分实现,生成一个新的有序数组,然后再取新数组的中位数
有序数组的中位数,数组为奇数为 数组中间的书
数组为偶数,则为数组中间相邻的2个数的平均数

#对于给定的两个数组,合并成一个有序的数组
def merage(left, right):
    result = []
    while left and right:
        if left[0] < right[0]:
            result.append(left.pop(0))
        else:
            result.append(right.pop(0))
    while left:
        result.append(left.pop(0))
    while right:
        result.append(right.pop(0))
    return result

#获取有序数组的中位数
def median(arr):
    if len(arr) < 2:
        return arr[0]
    result = 0
    avg_index = round(len(arr)/2)
    if len(arr) % 2 == 0:
        result = (arr[avg_index -1] + arr[avg_index])/2.0
    else:
        result = arr[avg_index]
    return result


if __name__ == "__main__":
    conbine_arr = merage([1, 3], [2])
    ret = median(conbine_arr)
    print(conbine_arr, ret)

时间复杂度:遍历全部数组 (m+n)(m+n)
空间复杂度:开辟了一个数组,保存合并后的两个数组 O(m+n)O(m+n)

补充对于归并排序的分析:

方法二:

因为是有序数组,考虑到可以使用二分法查找,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值