【49】(二分法)寻找两个正序数组的中位数(LC 4)

寻找两个正序数组的中位数

问题描述

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

进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

解题思路

找一个有序数组的中位数可以直接在O(1)时间完成:判断数组长度,若为偶数则取中间两数的平均值,若为奇数则取中间值。因此可以想到先把两数组合并再求中位数,因此此题的考点变成了如何合并两个有序数组,使用归并排序,时间复杂度是O(m+n)

(疲惫)直接贴写的好的题解了:详细通俗的思路分析,多解法

在题解中看到了不用合并数组的思路:已知两个数组的长度,那么可以由此计算出俩数组排序后中位数的下标,维护两个指针,初始时分别指向两个数组下标0的位置,每次将指向较小值的指针后移一位(如果一个指针已经到达数组末尾,则只需要移动另一个数组的指针),直到到达中位数的位置。这种方法的时间复杂度也是O(m+n)。

要想时间复杂度为O(logm+n)的话应该使用二分查找的方法,见官方题解

猜你喜欢

转载自blog.csdn.net/qq_43424037/article/details/114678444
今日推荐