您的位置:首页 > 其它

LeetCode OJ:Median of Two Sorted Arrays(两个有序数组的中位数)

2017-02-22 21:24 591 查看

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: