【二分查找】找出两个长度相等的数组中所有值的 “上中位数”

题目:来自脑客爱刷题

给定两个有序数组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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值