天天看点

【LeetCode】4. 寻找两个正序数组的中位数(C++)

4. 寻找两个正序数组的中位数

  • ​​1 题目描述​​
  • ​​2 示例描述​​
  • ​​2.1 示例1​​
  • ​​2.2 示例2​​
  • ​​2.3 示例3​​
  • ​​2.4 示例4​​
  • ​​2.5 示例5​​
  • ​​3 解题提示​​
  • ​​4 解题思路​​
  • ​​5 代码详解​​

1 题目描述

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

2 示例描述

2.1 示例1

输入:nums1 = [1,3], nums2 = [2]

输出:2.00000

解释:合并数组 = [1,2,3] ,中位数 2

2.2 示例2

输入:nums1 = [1,2], nums2 = [3,4]

输出:2.50000

解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

2.3 示例3

输入:nums1 = [0,0], nums2 = [0,0]

输出:0.00000

2.4 示例4

输入:nums1 = [], nums2 = [1]

输出:1.00000

2.5 示例5

输入:nums1 = [2], nums2 = []

输出:2.00000

3 解题提示

4 解题思路

5 代码详解

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        vector<int> ans ;
        for ( int i = 0 ; i< nums1.size() + nums2.size() ; i++ )
        {
            if ( i < nums1.size() )
            {
                ans.push_back(nums1[i]) ;
            }
            else 
            {
                ans.push_back(nums2[i - nums1.size()]);
            }
        }

        sort(ans.begin() , ans.end());

        double res ; 

        if ((nums1.size() + nums2.size()) % 2 != 0)
        {
            res = ans[(nums1.size() + nums2.size()) / 2] ;
        }
        else
        {
            res = (ans[(nums1.size() + nums2.size()) / 2 -1] + ans[(nums1.size() + nums2.size()) / 2 ]) ;
            res = res / 2 ;
        }

        return res ;
    }
};