You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中求两有序数组中位数:按需返回int或float的方法

两个有序数组中位数的类型自动返回方案

针对你提到的「无需显式判断两数之和能否被2整除」的需求,可以利用Python浮点数的is_integer()方法自动处理类型转换:先通过/运算得到浮点结果,若结果是整数(即两数之和为偶数)则转为int类型返回,否则直接保留浮点结果。这种方式无需直接判断两数之和的奇偶性,而是通过结果本身的特性完成类型适配。

核心类型处理代码

def get_mid_value(num1, num2):
    avg = (num1 + num2) / 2
    return int(avg) if avg.is_integer() else avg

结合有序数组的完整中位数实现

下面是基于二分查找的高效实现(时间复杂度O(log(min(m,n)))),同时集成上述类型处理逻辑,完美适配你的需求:

def find_median_sorted_arrays(nums1, nums2):
    # 确保nums1是较短数组,优化二分效率
    if len(nums1) > len(nums2):
        nums1, nums2 = nums2, nums1
    
    m, n = len(nums1), len(nums2)
    left, right = 0, m

    while left <= right:
        # 分割两个数组
        partition1 = (left + right) // 2
        partition2 = (m + n + 1) // 2 - partition1

        # 处理边界情况:分割线一侧无元素时用极值替代
        max_left1 = nums1[partition1 - 1] if partition1 > 0 else float('-inf')
        min_right1 = nums1[partition1] if partition1 < m else float('inf')
        
        max_left2 = nums2[partition2 - 1] if partition2 > 0 else float('-inf')
        min_right2 = nums2[partition2] if partition2 < n else float('inf')

        # 找到正确分割线
        if max_left1 <= min_right2 and max_left2 <= min_right1:
            # 总长度为奇数时直接返回中间值(int类型)
            if (m + n) % 2 == 1:
                return int(max(max_left1, max_left2))
            # 总长度为偶数时计算平均值并自动适配类型
            avg = (max(max_left1, max_left2) + min(min_right1, min_right2)) / 2
            return int(avg) if avg.is_integer() else avg
        elif max_left1 > min_right2:
            right = partition1 - 1
        else:
            left = partition1 + 1

示例验证

  • 中间元素为2和4时,计算得(2+4)/2=3.0,自动转为int类型返回3
  • 中间元素为3和4时,计算得(3+4)/2=3.5,直接返回浮点类型3.5

内容的提问来源于stack exchange,提问作者mradul chourasiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:30:21