给定两个大小分别为 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 == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106文章来源:https://uudwc.com/A/XNWMo
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。文章来源地址https://uudwc.com/A/XNWMo
- 实现C++
#include <math.h>
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int all_nums = nums1.size() + nums2.size(); // 4
bool isSingle = all_nums % 2 == 0 ? false:true; //2<---- False
double result_value = 0.0;
// 排序
int max_value_index = all_nums / 2;
std::cout << "max_value:" << max_value_index << std::endl;
vector<int> sort_vec;
int index_num1 = 0;
int index_num2 = 0;
std::cout << sort_vec.size() << std::endl;
std::cout << nums1.size()<< std::endl;
std::cout << nums2.size()<< std::endl;
while( sort_vec.size()!= (max_value_index + 1))
{
if(index_num1 == nums1.size() && index_num2 == nums2.size())
{
break;
}
else if(index_num1 == nums1.size())
{
std::cout << "取对应的元素A" << std::endl;
sort_vec.push_back(nums2[index_num2]);
index_num2 ++;
}
else if(index_num2 == nums2.size())
{
std::cout << "取对应的元素B" << std::endl;
sort_vec.push_back(nums1[index_num1]);
index_num1 ++;
}
else {
if(nums1[index_num1] < nums2[index_num2])
{
std::cout << "取对应的元素C" << std::endl;
std::cout << "参数::" << nums1[index_num1] << endl;
sort_vec.push_back(nums1[index_num1]);
index_num1 ++;
}
else {
std::cout << "取对应的元素D" << std::endl;
sort_vec.push_back(nums2[index_num2]);
index_num2 ++;
}
}
}
// 取对应的元素
if(isSingle)
{
int index = int(all_nums / 2);
std::cout << "取对应的元素1" << std::endl;
std::cout << index;
std::cout << sort_vec[index];
return sort_vec[index];
}
else {
int max_index = all_nums / 2;
int min_index = max_index - 1;
std::cout << "取对应的元素2" << std::endl;
std::cout << max_index;
std::cout << "sortMax:" << sort_vec[max_index] << std::endl;
std::cout << "sortMin:" << sort_vec[min_index] << std::endl;
double rs_value = double(sort_vec[max_index] + sort_vec[min_index]) / 2.0;
return rs_value;
}
return result_value;
}
};