给定两个大小分别为 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
来源:力扣(LeetCode)
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int l1=nums1.length;
int l2=nums2.length;
int[] arr=new int[l1+l2];
int mid,mid1,mid2;
mid1=(l1+l2)/2;
mid2=mid1-1;
int i=0;
int j=0;
int k=0;
while(i<l1+l2&&j<l1&&k<l2){
if(nums1[j]<nums2[k]){
arr[i]=nums1[j];
j++;
}
else{
arr[i]=nums2[k];
k++;
}
i++;
}
if(j==l1){
for(int m=j+k;m<l1+l2;m++){
arr[m]=nums2[k];
k++;
}
}
if(k==l2)
{
for(int m=j+k;m<l1+l2;m++){
arr[m]=nums1[j];
j++;
}
}
if((l1+l2)%2!=0){
mid=(l1+l2)/2;
return (double)arr[mid];
}else{
double target= (double)(arr[mid1]+arr[mid2]);
return target/2;
}
}
}