求两个排序数组的中间值

本文探讨如何求两个已排序数组的中间值。当数组元素总数为奇数时,中间值是归并排序后的中间元素;若总数为偶数,则是中间两个数的平均值。文中提供了解法1和解法3,详细解释了每种方法的思路,并链接到原理解证明。
摘要由CSDN通过智能技术生成

题目:数组A、B分别已经按照升序进行排列,元素个数分别为N1和N2。求这两个数组的中间值。

定义:当两个数组的元素个数之和为奇数时,中间数为两个数组归并排序后,排在中间的那个数;当两个数组的元素个数之和为偶数时,中间数为两个数组归并排序后,中间的两个数的平均值。


解决的思路:

将两个数组分别拆成两半,使得两个数组左半边的元素个数之和等于右半边的元素个数之和。


下面给出3种解法:

解法1:

import sys
class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        N1 = len(nums1)
        N2 = len(nums2)
        if N1 < N2:
            return self.findMedianSortedArrays(nums2, nums1)
        if N1 == 0:
            return 0
        elif N2 == 0:
            return (nums1[(N1-1)/2] + nums1[N1/2]) / 2.0
        flag = (N1 + N2) % 2 == 0
        Half = (N1 + N2) / 2 if flag else (N1 + N2) / 2 + 1
        lo = 0
        hi = N1 - 1
        while lo <= hi:
            mid = (hi 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值