您的位置:首页 > 其它

Leetcode---4.Median of Two Sorted Arrays

2017-10-03 21:43 211 查看

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为比较函数(可略写,默认为合并为一个升序序列)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: