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
相关产品推荐
相关产品推荐

