Median of Two Sorted Arrays
There are two sorted arrays A and B 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))
LeetCode:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/
题解:这道题目可以扩展为求两个有序数组中的第K大的数,我们可以通过递归解法每次从两个数组中去除k/2个数来求解
代码如下:
public class Solution {
public double findMedianSortedArrays(int A[], int B[]) {
int lenA = A.length;
int lenB = B.length;
if((lenA+lenB)%2 == 1)
return findK(A, 0, lenA-1, B, 0, lenB-1, (lenA+lenB)/2+1);
else
return (findK(A, 0, lenA-1, B, 0, lenB-1, (lenA+lenB)/2)+findK(A, 0, lenA-1, B, 0, lenB-1, (lenA+lenB)/2+1))/2.0;
}
private int findK(int[] A, int startA, int endA, int[] B, int startB, int endB, int k) {
int lenA = endA - startA + 1;
int lenB = endB - startB + 1;
if(lenA > lenB){
return findK(B, startB, endB, A, startA, endA, k);
}
if(lenA == 0)
return B[startB+k-1];
if(k == 1)
return Math.min(A[startA], B[startB]);
int posA = Math.min(k/2, lenA);
int posB = k-posA;
if(A[startA+posA-1] == B[startB+posB-1])
return A[startA+posA-1];
else if(A[startA+posA-1] < B[startB+posB-1]){
return findK(A, startA+posA, endA, B, startB, startB+posB-1, k-posA);
}else{
return findK(A, startA, startA+posA-1, B, startB+posB, endB, k-posB);
}
}
}