【每日刷题】寻找两个有序数组的中位数

day4, 寻找两个有序数组的中位数

题目来源:leetcode
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:
nums1 = [1, 3]
nums2 = 2
则中位数是 2.0

示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5

解答:首先声明,这是一道考研题。。
先说想法,用空间换时间,先声明一个整型矢量,用来存储nums1 和nums2 ,随后对该矢量使用sort,最后选择中位数即可。
注意:这不是最优解!!!

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        vector<int> nums;
        for( int i = 0; i< nums1.size(); i++)
            nums.push_back( nums1[i]);
        for( int i = 0; i< nums2.size(); i++)
            nums.push_back( nums2[i]);
        
        sort( nums.begin(), nums.end());
        if( nums.size() %2) //奇数
            return nums[ (0 + nums.size()) /2];
        else
            return (double)(nums[ (0 + nums.size()) /2] + nums[ (0 + nums.size()) /2 - 1] )/ 2;
    }
};

结果:【每日刷题】寻找两个有序数组的中位数_第1张图片


我的微信公众号

你可能感兴趣的:(每日刷题)