Description:
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分析:
方法一:
将nums1和nums2进行合并,排序,最后取中位数。代码如下:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
double mid;
/*
//方法1:
//将nums1和nums2合并
nums1.insert(nums1.end(),nums2.begin(),nums2.end());
//排序
sort(nums1.begin(),nums1.end());
//取中位数
int size=nums1.size();
if(size%2==0){
mid=(nums1[size/2]+nums1[size/2-1])/2.0;
}
else{
mid=nums1[size/2];
}
*/
//方法2
int size1=nums1.size();
int size2=nums2.size();
vector<int> ret(size1+size2);
merge(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),ret.begin());
//取中位数
int size=size1+size2;
if(size%2==0){
mid=(ret[size/2]+ret[size/2-1])/2.0;
}
else{
mid=ret[size/2];
}
return mid;
}
};
- 说明:
这里采用了两种合并的方法进行实现:
1、vector中的insert函数:
insert() 函数有以下三种用法:
a、
iterator insert( iterator loc, const TYPE &val );
在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
b、
void insert( iterator loc, size_type num, const TYPE &val );
在指定位置loc前插入num个值为val的元素
c、
void insert( iterator loc, input_iterator start, input_iterator end );
在指定位置loc前插入区间[start, end)的所有元素 .
顶
2、stl中的merge函数:
merge函数的作用是:将两个有序的序列合并为一个有序的序列。
函数参数:merge(first1,last1,first2,last2,result,compare);
firs1t为第一个容器的首迭代器
last1为第一个容器的末迭代器
first2为第二个容器的首迭代器
last2为第二个容器的末迭代器
result为存放结果的容器,comapre为比较函数(可略写,默认为合并为一个升序序列)。