leetcode4 寻找两个正序数组的中位数 用c++写出
时间: 2024-10-04 16:03:06 浏览: 36
在 LeetCode 的第 4 题“寻找两个升序整数数组的中位数”中,我们需要合并两个已排序的整数数组,并找到合并后的数组的中位数。下面是一个简单的 C++ 解决方案,使用了双指针技巧:
```cpp
#include <vector>
using namespace std;
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size(), n = nums2.size();
int total_size = m + n;
// 如果总元素数为奇数,中位数将是中间的那个元素
if (total_size % 2 == 1) {
int mid = total_size / 2;
if (m > n) {
// nums1较大,先遍历nums2
for (int i = 0; i < n && nums1[mid - n - i - 1] <= nums2[i]; i++) {}
// nums1的指针移动到中间位置
mid -= i;
} else {
// nums2较大,先遍历nums1
for (int i = 0; i < m && nums2[mid - m - i - 1] <= nums1[i]; i++) {}
// nums2的指针移动到中间位置
mid -= i;
}
return double(nums1[mid] + nums2[mid]) / 2.0;
} else { // 总元素数为偶数,中位数是中间两个数的平均值
int low = total_size / 2 - 1;
if (m > n) {
for (int i = 0; i < n && nums1[low - n + i] <= nums2[i]; i++) {}
low -= i;
} else {
for (int i = 0; i < m && nums2[low - m + i] <= nums1[i]; i++) {}
low -= i;
}
return (double)(nums1[low] + nums2[low]) / 2.0;
}
}
```
在这个函数中,我们首先检查数组的总元素数是奇数还是偶数,然后根据这个条件分别处理。通过比较两数组的元素来确定两个指针的位置,最后得到中位数。
阅读全文