当前位置:首页 >深度 > 正文

全球今热点:算法-寻找两个正序数组的中位数
2023-04-26 16:38:48    腾讯云


(资料图片)

给定两个大小分别为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

这道题要求找出两个已排序数组的中位数,且算法的时间复杂度应为 O(log(m+n))。其中,O 表示时间复杂度的上限,log 表示对数,m 和 n 分别表示两个数组的大小。

我们可以使用二分查找算法来解决这个问题。首先,我们将两个数组分别记为 nums1 和 nums2。为了方便,我们假设 nums1 的长度小于等于 nums2 的长度。

我们可以在 nums1 中选取一个位置 i,在 nums2 中选取一个位置 j,使得 i+j=(m+n+1)/2,其中 m 和 n 分别是两个数组的长度。如果我们能够保证:

nums1[i-1] <= nums2[j] 且 nums2[j-1] <= nums1[i]

那么,我们就已经将 nums1 和 nums2 分成了两个部分,且第一部分中的所有元素都小于第二部分中的所有元素。此时,中位数即为:

当 m+n 为奇数时,中位数为 max(nums1[i-1],nums2[j-1]); 当 m+n 为偶数时,中位数为 (max(nums1[i-1],nums2[j-1])+min(nums1[i],nums2[j]))/2。

为了保证上述条件成立,我们可以使用二分查找算法在 [0, m] 中查找合适的 i 值。在每次二分查找时,我们可以计算出 j 的值,然后检查上述条件是否成立。如果成立,则返回中位数;否则,我们就需要调整 i 的值,以便满足上述条件。具体地,如果 nums1[i-1] > nums2[j-1],则我们需要将 i 的值减小,否则将 i 的值增大。时间复杂度为 O(log(min(m,n)))。

下面是代码实现:

class Solution:    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:        if len(nums1) > len(nums2):            nums1, nums2 = nums2, nums1        m, n = len(nums1), len(nums2)        left, right = 0, m        while left <= right:            i = (left + right) // 2            j = (m + n + 1) // 2 - i            if i < m and nums2[j-1] > nums1[i]:                left = i + 1            elif i > 0 and nums1[i-1] > nums2[j]:                right = i - 1            else:                if i == 0:                    max_left = nums2[j-1]                elif j == 0:                    max_left = nums1[i-1]                else:                    max_left = max(nums1[i-1], nums2[j-1])                if (m + n) % 2 == 1:                    return max_left                if i == m:                    min_right = nums2[j]                elif j == n:                    min_right = nums1[i]                else:                    min_right = min(nums1[i], nums2[j])                return (max_left + min_right) / 2

关键词:

下一篇: 最后一页
上一篇: 当前视讯!京北方股东户数增加7.54%,户均持股14.5万元

全球今热点:算法-寻找两个正序数组的中位数

当前视讯!京北方股东户数增加7.54%,户均持股14.5万元

天天观焦点:江南水务:公司与华为盘古目前没有合作

抢“鲜”打卡第六届数字中国建设成果展览会_全球今头条

今日讯!大众集团旗下Cupra品牌欲每年销售7万辆中国产Tavascan

时隔一个月 周鸿祎再度现场演示360GPT多轮对话能力

全球快讯:Nothing Phone(2)概念视频曝光 创始人:一流的设计

[快讯]先步信息公布2022年年度分红方案预案_天天观察

新加坡金管局:保持新加坡元的有效汇率路径意味着货币政策将继续对通胀产生抑制作用

内蒙古未来三天将有大风沙尘天气|视焦点讯

【天天新视野】银保监会:保险资金为实体经济融资超过21万亿元

天天即时:庄印芳口碑_庄印芳

【AI】一觉睡醒,ChatGPT 竟然被淘汰了?

作业帮推出 AI 老师一对一学习机 售价 2699 元起

恒立液压:2022年度净利润约23.43亿元,同比下降13.03%

永贵电器(300351)4月25日主力资金净卖出1683.49万元

【新视野】超40城调整首套房贷利率下限至4%以下 上海房贷利率暂时没有调整安排

退休局长孙女存款9位数炫富受关注,官方核查1个月后最新回应

美国消费者信心指数降至7月以来最低水平,因对经济前景的看法更为悲观|全球播资讯

天天动态:新致软件(688590)2022年年报财务简析:增收不增利,债务压力大

溢出性蛋白尿是什么意思_什么是溢出性蛋白尿

【世界快播报】国安队主帅斯坦利:失利后,更衣室里充满失望情绪

吴伟仁院士深度披露国际月球科研站建设方案:基本型计划2028年前建成

恒大地产公告披露重大诉讼、未能清偿到期债务等事项|全球热消息

mcn机构是什么公司

登记在册在世的南京大屠杀幸存者仅剩42人-今日播报

前沿资讯!德意志银行:中国经济加速将提振亚洲尤其东盟地区的经济增长

今日热文:中甲首秀梅开二度,广西平果哈嘹小将刘柏杨当选首轮最佳球员

小学生学校宿舍管理制度十条_小学生寝室管理制度

全球实时:湿疹的症状(湿尸)

环球热资讯!一个人喝酒一个人唱歌是什么歌_一个人喝酒一个人唱歌是啥歌

网易起诉暴雪索赔3亿!国服退款暴雪分文未出?

门左开右开怎么分

凌云光:一季度归母净利1017.18万元 同比扭亏 消费电子相关营收增长144.30%|世界头条

无人零售行业现状分析2023

世界要闻:韩亚航空仁川至长沙航线复航