问题描述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
问题分析
利用已有两个数组的有序性,创建新的数组nums3,将nums1和nums2中数组元素按升序排列到数组nums3中,再找出nums3的中位数即可。
代码实现
C++版
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m=nums1.size();
int n=nums2.size();
int mid=(m+n)/2;
int i=0,j=0,k=0; //i,j记录下标
vector<int> nums3(m+n);
if (m==0)
nums3=nums2;
else if (n==0)
nums3=nums1;
else{
while(i<m && j<n){
if(nums1[i]<nums2[j]){
nums3[k]=nums1[i];
i++;
}
else{
nums3[k]=nums2[j];
j++;
}
k++;
}
if(i==m){
while(j<n){
nums3[k]=nums2[j];
j++;k++;
}
}
else if(j==n){
while(i<m){
nums3[k]=nums1[i];
i++;k++;
}
}
}
if((m+n)%2!=0)
return nums3[mid]/1.0;
else
return (nums3[mid-1]+nums3[mid])/2.0;
}
};