题目描述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
解决:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n=nums1.length;
int m=nums2.length;
int []nums=new int[n+m];
int i=0,j=0;
int count=0;
//判断,若其中有一个数组为空
if(n==0){
if(m%2==0){
return (nums2[m/2-1]+nums2[m/2])/2.0;
}else{
return nums2[m/2];//奇数
}
}
if(m==0){
if(n%2==0){
return (nums1[n/2-1]+nums1[n/2])/2.0;
}else{
return nums1[n/2];
}
}
while(count!=m+n){
if(nums1[i]<nums2[j]){//注意,这里的ij不能加1
nums[count++]=nums1[i++];//i,j的设置也很巧妙,他们不是同时移动的,只有存入了nums数组,才会向下移动1
}else{
nums[count++]=nums2[j++];
}
if(i==n){
while(j!=m){
nums[count++]=nums2[j++];
}
break;//两数组都遍历完成需要跳出循环
}
if(j==m){
while(i!=n){
nums[count++]=nums1[i++];
}
break;
}
}
if(count%2==0){//注意,全篇的count十分巧妙,下标是从e 开始的,长度却是count,因固此,count=nmtr时,不会进入循环,但已经遍历了所有数字了,并且合并后数组的长度就是count
return (nums[count/2-1]+nums[count/2])/2.0;
}else{
return (nums[count/2]);
}
}
}