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大的数算法为基础写的代码。
这个之前接触过,后来忘了。。。
之后再学习一遍以后再完善博文。