算法-寻找两个正序数组的中位数|世界资讯

腾讯云 2023-04-26 16:33:23


(资料图片仅供参考)

给定两个大小分别为 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
x

热门推荐

算法-寻找两个正序数组的中位数|世界资讯

2023-04

106家储能企业上榜!国家知识产权示范企业和优势企业名单确定

2023-04

今日讯!98件(套)海外文物史料入藏侵华日军南京大屠杀遇难同胞纪念馆

2023-04

今日热搜:五一假期陕西铁路预计发送旅客超400万人次

2023-04

北洋造老银元价格(2023年04月26日) 世界百事通

2023-04

环球即时:佐力药业(300181):该股换手率大于8%(04-26)

2023-04

每日热点:全球PC出货量大幅下滑 大家为啥不换新电脑了?

2023-04

【环球新要闻】吉林市租房子个人房源_吉林市租房

2023-04

猫咪踩奶是什么意思(成年猫踩奶是为了感受幸福也是猫咪心情愉悦的一种体现)

2023-04

红魔难了!曼联争四关键期遭遇伤病潮 B费将缺战热刺

2023-04

推荐阅读

小米开始在越南生产手机 此前主要在中国和印度

2022-07

市民仍需注意防暑降温 本周或有局地强对流天气

2022-07

内蒙古满洲里市启动第四轮大规模核酸检测

2021-12

微博博主“鹿道森”确认身亡 警方:排除他杀

2021-12

失联摄影师“鹿道森”确认身亡 尸体被打捞上岸

2021-12

黑龙江讷河第二轮全员核检结果皆为阴性

2021-12

2021天象剧场收官:月“会”群星、日全食、流星雨扎堆亮相

2021-12

陕西新增1例境外归国集中隔离期满确诊病例

2021-12

内蒙古新增本土确诊病例91例

2021-12

宁夏银川警方破获2起以“互联网+物流寄递”为模式的特大毒品案件

2021-12