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)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
思路:把两个数组合并为一个,然后根据位置直接得到对应元素并计算结果(因为都是有序数组,依次比较最前面的即可)
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n1 = nums1.size();
int n2 = nums2.size();
vector<int> nums3;
vector<int>::iterator it1 = nums1.begin();
vector<int>::iterator it2 = nums2.begin();
while(!(it1 == nums1.end() && it2 == nums2.end())){
if(it1 == nums1.end()){
while(it2 != nums2.end()){
nums3.push_back(*it2);
it2++;
}
}
else if(it2 == nums2.end()){
while(it1 != nums1.end()){
nums3.push_back(*it1);
it1++;
}
}
else{
if(*it1<=*it2){
nums3.push_back(*it1);
it1++;
}else{
nums3.push_back(*it2);
it2++;
}
}
}
//vector<int>::iterator it3 = nums3.begin();
//for(;it3!=nums3.end();it3++){
// cout<<*it3<<" ";
//}
if(nums3.size()%2 == 0){
float mid = nums3.size()/2 - 1;
return (((float)(*(nums3.begin()+mid))+(float)(*(nums3.begin()+mid+1)))/2);
}else{
float mid = nums3.size()/2;
return (float)(*(nums3.begin()+mid));
}
}