给定两个大小分别为 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
-
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n=nums1.size(); int m=nums2.size(); vector<int> num(m+n); int a=0,b=0; //时间复杂度O(M+N),超了,但是没想到其他方法, for(int i=0;i<=(m+n)/2;i++){ if(a<n&&b<m){ if(nums1[a]<=nums2[b]){ num[i]=nums1[a]; a++; } else{ num[i]=nums2[b]; b++; } } else if(a<n){ num[i]=nums1[a]; a++; } else if(b<m){ num[i]=nums2[b]; b++; } } if(num.size()%2==0){ return ((double)num[num.size()/2-1]+(double)num[num.size()/2])/2; } else{ return num[num.size()/2]; } } };