问题描述:There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be $O(log(m+n))$.
Example:
1 | nums1 = [1, 3] |
这道题最直观的解法是(伪代码 描述):
1 | def findMedianSortedArrays(nums1, nums2): |
即合并排序取中间值。
从伪代码易得,该算法的时间复杂度即排序算法的时间复杂度。没有仔细分析,但应该可以做到平均$O(log(m+n))$。
但合并已排序数组可以通过依次比较nums1和nums2来做,利用已经做好的排序。算法不是很好描述,比较好举例,已题目数据为例
1 | nums1[0] < nums2[0] so nums3[0] = nums1[0] |
此外还有两个可以优化的点:
- 得到的数据不需要完整,需要计算量数组长度和的一半
- 我们不需要目标数组,所以不需要创建新数组
综上,优化后时间复杂度为:$O(\frac{m+n}{2})$,空间复杂度为:$O(1)$。完整代码(C语言描述):
1 | double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { |