题目:
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)).
代码:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int>::iterator iter1, iter2;
vector<int> num; //保存nums1和nums2中共m+n个数据
int m, n;
m = nums1.size();
n = nums2.size();
iter1 = nums1.begin();
iter2 = nums2.begin();
if (m == 0){
num = nums2;
}else if (n == 0)
{
num = nums1;
}
else{
for (vector<int>::size_type i = 0; i < (m + n); i++)
{
if (iter1 != nums1.end() && iter2 != nums2.end()) //nums1, nums2未遍历完
{
if (*iter1 <= *iter2)
{
num.push_back(*iter1);
iter1++;
}
else{
num.push_back(*iter2);
iter2++;
}
}
else if (iter1 == nums1.end()) //nums1遍历完,nums2未遍历完
{
num.insert(num.end(), iter2, nums2.end());
break;
}
else{ //nums1未遍历完,nums2遍历完
num.insert(num.end(), iter1, nums1.end());
break;
}
}
}
if ((m + n) % 2 == 0) //偶数个数
{
return (num[(m + n) / 2 - 1] + num[(m + n ) / 2 ] + 0.0) / 2;
}
else{
return (num[(m + n + 1) / 2 -1] + 0.0);
}
}
};
结果:
思考:
题意是要找出nums1和nums2中共m+n个数的中位数,那么我最先想到的是要将两个数组按顺序组合成一个新的数组,取新数组的中位数即可
按照上述思想,则代码便能很好理解了。