4. Median of Two Sorted Arrays
问题描述
计算两个排好序的数组的中位数
我的解答
首先merge两个数组然后求解中位数
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int> tmp;
int i, j;
// 处理特殊情况
if (nums1.size() == 0) {
tmp = nums2;
}
else if (nums2.size() == 0) {
tmp = nums1;
}
// merge 两个数组
else {
// 以第一个数组为基准合并
for (i = 0, j = 0; i != nums1.size(); ++i) {
if (i < nums1.size() && j < nums2.size() && nums1[i] < nums2[j]) {
tmp.push_back(nums1[i]);
}
else if (i < nums1.size() && j < nums2.size() && nums1[i] == nums2[j]) {
tmp.push_back(nums1[i]);
tmp.push_back(nums2[j++]);
}
else {
while (i < nums1.size() && j < nums2.size() && nums1[i] > nums2[j]) {
tmp.push_back(nums2[j++]);
}
tmp.push_back(nums1[i]);
}
}
// 合并剩下的
for (; j < nums2.size(); ++j) {
tmp.push_back(nums2[j]);
}
}
// 计算中位数
double mid;
int length = tmp.size();
if (length % 2 == 1){
mid = tmp[length / 2];
}
else {
mid = (tmp[length / 2 - 1] + tmp[length /2]) / 2.0;
}
return mid;
}
};