给定两个大小分别为 和 的正序(从小到大)数组 和 。请你找出并返回这两个正序数组的 中位数 。
时间: 2024-05-10 18:17:26 浏览: 106
这道题可以用归并排序的思想来解决。
首先将两个数组合并成一个有序的数组,然后根据数组的长度来判断中位数的位置,如果数组长度为奇数,则中位数为排序后的数组中间位置的元素;如果数组长度为偶数,则中位数为排序后的数组中间两个元素的平均值。
具体代码实现如下:
```
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size(), n = nums2.size();
vector<int> nums(m + n); // 定义一个长度为 m+n 的数组
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (nums1[i] < nums2[j]) {
nums[k++] = nums1[i++];
} else {
nums[k++] = nums2[j++];
}
}
while (i < m) nums[k++] = nums1[i++]; // 将 nums1 中剩余的元素加入 nums 中
while (j < n) nums[k++] = nums2[j++]; // 将 nums2 中剩余的元素加入 nums 中
if ((m + n) % 2 == 0) {
return (nums[(m + n) / 2 - 1] + nums[(m + n) / 2]) / 2.0;
} else {
return nums[(m + n) / 2];
}
}
};
```
时间复杂度为 $O(m+n)$,空间复杂度为 $O(m+n)$。
阅读全文