【数组】Median of Two Sorted Arrays

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)).

double findMedianSortedArrays(int A[], int m, int B[], int n) {
	if(m<3 || n<3) 
	    return TrivialMedian(A,m,B,n);
	int i = m/2;
	int j = (m % 2 == 0 && n % 2 == 0) ? n/2-1 : n/2;
	if(A[i] >= B[j]){
		if(j >= m-i-1) 
			return findMedianSortedArrays(A,i+1,B+m-i-1,n-m+i+1);
		else
			return findMedianSortedArrays(A,m-j,B+j,n-j);
	}else{
		if(i <= n-j-1)
			return findMedianSortedArrays(A+i,m-i,B,n-i);
		else
			return findMedianSortedArrays(A+n-j-1,m-n+j+1,B,j+1);
	}
}
double TrivialMedian(int A[], int m, int B[], int n){
	vector<int> nums ;
	for(int i = 0; i < m; i++)
		nums.push_back(A[i]);
	for(int i = 0; i < n; i++)
		nums.push_back(B[i]);
	sort(nums.begin(),nums.end());
	int k = m+n;
	if(k % 2 == 0)
		return 0.5*(nums[k/2]+nums[k/2 - 1]);
	else
		return nums[k/2];
}

posted on 2014-05-22 10:54  小唯THU  阅读(257)  评论(0)    收藏  举报

导航