题目:来自脑客爱刷题
给定两个有序数组arr1和arr2,两个数组长度相等,求两个数组中所有数的中位数。
注意,这里的中位数是指 “上中位数” ,不是取两个中间值的平均数,而是取两个中间值较小的那个。
例如:
arr1 = {1,2,3,4};
arr2 = {3,4,5,6};
返回3;
int FindMedianInTwoSortedArraySameLength_Core(int* num1, int begin1, int end1, int* num2, int begin2, int end2)
{
if (begin1 == end1)//两个数组都只有一个数
return min(num1[begin1], num2[begin2]);
int offset, len = end1 - begin1 + 1;
if ( len & 1)//数组长度是奇数
offset = 0;
else
offset = 1;
int mid1 = begin1 + (end1 - begin1) / 2;
int mid2 = begin2 + (end2 - begin2) / 2;
//两个中间值相等,则该值为所求结果
if (num1[mid1] == num2[mid2])
return num1[mid1];
else if (num1[mid1] < num2[mid2])
return FindMedianInTwoSortedArraySameLength_Core(num1,mid1+offset, end1, num2, begin2, mid2);
else //num1[mid1] > num2[mid2]
return FindMedianInTwoSortedArraySameLength_Core(num1, begin1, mid1, num2, mid2+offset, end2);
}
int FindMedianInTwoSortedArraySameLength(int* num1, int len1, int* num2, int len2)
{
if (num1 == nullptr || num2 == nullptr || len1 != len2)
throw new exception("error");
return FindMedianInTwoSortedArraySameLength_Core(num1, 0, len1 - 1, num2, 0, len2 - 1);
}