两个排序数组的中位数(Median Of Two Sorted Arrays)
给定两个大小为 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
原题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
题解:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int len1=nums1.size();
int len2=nums2.size();
vector<int>add;
for(int i=0;i<len1;i++)
add.push_back(nums1[i]);
for(int j=len1;j<len2+len1;j++)
add.push_back(nums2[j-len1]);
sort(add.begin(),add.end());
int len3=len1+len2;
if(len3%2!=0)
return double(add[(len1+len2)/2.0]);
else
return (add[(len1+len2)/2]+add[(len1+len2)/2-1])/2.0;
}
};
这个题我是直接合并求解的,将两个容器里的数合并到一个容器里,利用sort方法自增排序,根据新容器的大小判断是直接输出还是要去平均数。注意题目给出的是double,需要在/2的时候变成2.0来保留一位小数。
(这题我有个小问题,在leetcode的在线编译器里面调试的时候无论如何输出的是2.000000,还是按照double保留的,但是原样提交反而过了,希望有知道的大佬能帮忙解释下,谢谢)