给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
你可以假设 nums1 和 nums2 不同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5
可通过答案:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int> num;
int n=nums1.size()+nums2.size();
while (!nums1.empty() && !nums2.empty()) {
if (nums2.back() >= nums1.back()) {
int temp = nums2.back();
nums2.pop_back();
num.push_back(temp);
}
else if (nums2.back() < nums1.back()) {
int temp = nums1.back();
nums1.pop_back();
num.push_back(temp);
}
}
while (!nums1.empty())
{
int temp = nums1.back();
nums1.pop_back();
num.push_back(temp);
}
while (!nums2.empty())
{
int temp = nums2.back();
nums2.pop_back();
num.push_back(temp);
}
if (num.size() % 2 == 1)
return num.at(num.size() / 2);
else {
double temp;
temp = ((double)num.at(num.size() / 2 - 1) + (double)num.at(num.size() / 2)) / 2.0;
return temp;
}
return 0;
}
};
######全部代码:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int> num;
int n=nums1.size()+nums2.size();
while (!nums1.empty() && !nums2.empty()) {
if (nums2.back() >= nums1.back()) {
int temp = nums2.back();
nums2.pop_back();
num.push_back(temp);
}
else if (nums2.back() < nums1.back()) {
int temp = nums1.back();
nums1.pop_back();
num.push_back(temp);
}
}
while (!nums1.empty())
{
int temp = nums1.back();
nums1.pop_back();
num.push_back(temp);
}
while (!nums2.empty())
{
int temp = nums2.back();
nums2.pop_back();
num.push_back(temp);
}
if (num.size() % 2 == 1)
return num.at(num.size() / 2);
else {
double temp;
temp = ((double)num.at(num.size() / 2 - 1) + (double)num.at(num.size() / 2)) / 2.0;
return temp;
}
return 0;
}
};
int main() {
vector<int> nums1;
vector<int> nums2;
nums1.push_back(1);
nums1.push_back(3);
nums2.push_back(2);
nums2.push_back(4);
Solution a;
cout<< a.findMedianSortedArrays(nums1, nums2);
getchar();
}