给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入: nums1 = [1,3], nums2 = [2]
输出: 2.00000
解释: 合并数组 = [1,2,3] ,中位数 2示例 2:
输入: nums1 = [1,2], nums2 = [3,4]
输出: 2.50000
解释: 合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5提示:
nums1.length == mnums2.length == n0 <= m <= 10000 <= n <= 10001 <= m + n <= 2000-106 <= nums1[i], nums2[i] <= 106我的代码:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
// 首先按照归并排序的方法 对两个数字进行合并
vector<int> nums3;
int i = 0, j = 0;
while(i < nums1.size() && j < nums2.size())
{
if(nums1[i] < nums2[j]) nums3.push_back(nums1[i ++]);
else nums3.push_back(nums2[j ++]);
}
while(i < nums1.size()) nums3.push_back(nums1[i ++]);
while(j < nums2.size()) nums3.push_back(nums2[j ++]);
double res = 0;
if(nums3.size() % 2 == 1) res = nums3[nums3.size() / 2];
else
{
// 这里需要注意的是对于size为偶数的情况 是需要-1的
// 因为数组下标从0开始
int t = nums3.size() - 1;
res = (nums3[t / 2] + nums3[t / 2 + 1]) / 2.0;
}
return res;
}
};对应我的掘金文章:https://juejin.cn/post/7147341453931315230