LeetCode 4_Median of Two Sorted Arrays

LeetCode 4_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)).

题目的关键是时间复杂度的要求,不然直接将两个数组凑起来就行,不过为O(m + n);

由于两个数组都已排好序,可以分别取两个数组的中位数进行比较假设分别为A,B,若A < B,显然第一个数组中小与

A的肯定小与整体的中位数(设为C),反之亦然,当然若A == B,A就是C了。到这里,转换一下思维,何为中位数?

不就是整个数据中处于中间位置的那个数吗(先不分奇偶,意思懂就行),那么中位数也就是正好有一半数据比其小的

那个数,这好像是一个比较经典的问题,即求第K小的数据!想到了这个地方,题目的解法也就出来了,代码如下:

int FindMedium(vector<int>::iterator iter1, int m, vector<int>::iterator iter2, int n, int k)
{
	if(m > n)
		return FindMedium(iter2, n, iter1, m, k);
	if(m == 0)
		return (*(iter2 + k - 1));
	if(k == 1)
		return min(*iter1, *iter2);
	int tmp1 = min(k / 2, m);
	int tmp2 = k - tmp1;
	if(*(iter1 + tmp1 - 1) < *(iter2 + tmp2 - 1))
		return FindMedium(iter1 + tmp1, m - tmp1, iter2, n, tmp2);
	else if (*(iter1 + tmp1 - 1) > *(iter2 + tmp2 - 1))
		return FindMedium(iter1, m, iter2 + tmp2, n - tmp2, tmp1);
	else
		return *(iter1 + tmp1 - 1);
}
class Solution {
public:
	double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) 
	{
		int total = nums1.size() + nums2.size();
		vector<int>::iterator iter1 = nums1.begin();
		vector<int>::iterator iter2 = nums2.begin();
		if(total & 0x01)
			return FindMedium(iter1, nums1.size(), iter2, nums2.size(), total / 2 + 1);
		else
			return ( FindMedium(iter1, nums1.size(), iter2, nums2.size(), total / 2) 
			+ FindMedium(iter1, nums1.size(), iter2, nums2.size(), total / 2 + 1) ) * 1.0 / 2;
	}
};

格式调了半天,也没对好,不晓得又出什么问题了,吐槽下CSDN。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值