您的位置:首页 > 其它

leetcode4

2015-09-24 15:35 232 查看
Median of Two Sorted Arrays

求两个有序数组的中位数。假设数组长度为m和n

题目要求时间复杂度为O(log(m+n))

当时没考虑时间复杂度,觉着把两个有序数组按照插入的方法合并,再找中位数就好了。

这时也分为两种情况:

m+n为偶数(两数的平均),m+n为奇数。

时间复杂度可能达不到要求,但是居然通过了:

代码:

class Solution{
public:
	double findMedianSortedArrays(vector<int>&num1,vector<int>&num2){
		vector<int>result;
		vector<int>::iterator it1=num1.begin();
		vector<int>::iterator it2=num2.begin();
		while(it1!=num1.end()||it2!=num2.end())
		{
			if(it1==num1.end())
			{
				result.insert(result.end(),it2,num2.end());
				break;
			}
			if(it2==num2.end())
			{
				result.insert(result.end(),it1,num1.end());
				break;
			}
			if(*it1 == *it2)
			{
				result.push_back(*it1);
				result.push_back(*it1);
				it1++;
				it2++;
			}
			else if(*it1<*it2)
			{
				result.push_back(*it1);
				it1++;
			}
			else
			{
				result.push_back(*it2);
				it2++;
			}
		}
		int length=result.size();
		if(length%2 == 0)
		{
			return double((result[length/2]+result[length/2 - 1])/2.0);
		}
		else
		{
			return double(result[(length-1)/2]*1.0);
		}
	}
};
后来在网上看到有以求第Kth大的数算法为基础写的代码。

这个之前接触过,后来忘了。。。

之后再学习一遍以后再完善博文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: