题目:Median of Two Sorted Arrays
描述: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)).
这个题要求“两个有序数组的中位数”,我们可以推广到求“两个有序数组的第k小的数(findKth)”。题目要求算
法的时间复杂度为O(log (m+n)),很明显不能简单地进行归并,这种时间复杂度容易联想到二分查找的思
想。findKth关键思想如下:
- 开始时检测边界条件(数组长度是否为0,k是否为0)
- 从数组A中取中间某个位置aMid = aLen * k / (aLen + bLen),取数组B中位置bMid = k - aMid
- 比较A[aMid]和B[bMid]大小,如果A[aMid]<B[bMid],排除掉数组A中aMid之前的元素和数组B中bMid之后的元素,
反之则排除掉数组B中bMid之前的元素和数组A中aMid之后的元素,同时更新K值- 递归调用findKth,从缩减后的两个有序数组中寻找第K小的数
1 | public static double findMedianSortedArrays(int A[], int B[]) { |