寻找两个正序数组的中位数-python
# 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
#
#
#
# 示例 1:
#
#
# 输入:nums1 = [1,3], nums2 = [2]
# 输出:2.00000
# 解释:合并数组 = [1,2,3] ,中位数 2
方法:划分数组法,时间复杂度O(logmin(m,n))
def findMedianNum(nums1, nums2): """ 参考:https://blog.csdn.net/weixin_42721167/article/details/112637470 :param nums1: :param nums2: :return: """ m = len(nums1) n = len(nums2) MAX_NUM = 10 ** 6 if m > n: return findMedianNum(nums2, nums1) if m == 0: return nums2[n // 2] if n % 2 == 1 else (nums2[n // 2 -1 ] + nums2[(n // 2)]) / 2 if n == 0: return nums1[m // 2] if m % 2 == 1 else (nums1[m // 2 -1] + nums1[(m // 2)]) / 2 left, right = 0, m # 左右指针,寻找划分点 median1, median2 = 0, 0 # 前后半部分中位数 i, j = 0, 0 # nums1, nums2 划分点 numsim1, numsi, numsjm1, numsj = 0, 0, 0, 0 while left <= right: print(left) i = (left + right) // 2 j = (m + n + 1) // 2 - i # 要满足i+j是总长度的一半 # 上下左右四个方位进行控制 numsim1 = (nums1[i - 1] if i != 0 else -MAX_NUM) numsi = (nums1[i] if i != m else MAX_NUM) numsjm1 = (nums2[j - 1] if j != 0 else -MAX_NUM) numsj = (nums2[j] if j != n else MAX_NUM) if numsim1 <= numsj: median1, median2 = max(numsim1, numsjm1), min(numsi, numsj) left = i + 1 else: right = i - 1 return (median1 + median2) / 2 if (m + n) % 2 == 0 else median1
时刻记着自己要成为什么样的人!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)