Leetcode---4.Median of Two Sorted Arrays

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为比较函数(可略写,默认为合并为一个升序序列)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值