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
解题思路
考虑时间复杂度。STL中set和multiset有自动排序功能,因此本题借助了multiset(因为可能存在相同的值),把两个数组中的值都先插入到multiset对象中,再找到中间的值就简单了。
Code
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
multiset<int> miset;
double median = 0;
int num1 = nums1.size();
int num2 = nums2.size();
if(num1==0&&num2==0)
return median;
miset.insert(nums1.cbegin(),nums1.cend());
miset.insert(nums2.cbegin(),nums2.cend());
int sum = num1 + num2;
multiset<int>::iterator set_it = miset.begin();
int num = 0; //num用来标记miset中走的位置
int i =sum/2; //i用来确定中间位置
while(set_it != miset.end()){
if(num == i){
if(sum%2==0) //两个数组总共有偶数个元数
median = (*set_it + *(--set_it))/2.0;
else //两个数组总共有奇数个元数
median = *set_it;
break; //找到中间的值就跳出循环
}
num ++;
set_it++;
}
return median;
}
};