给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int[] nums;int m=nums1.length;int n=nums2.length; nums=new int[m+n];if(m==0){if(n%2==0){return (nums2[n/2-1]+nums2[n/2])/2.0;}else{return nums2[n/2];}}if(n==0){if(m%2==0){return (nums1[m/2-1]+nums1[m/2])/2.0;}else{return nums1[m/2];}}int count=0;int i=0,j=0;while(count!=(m+n)){if(i==m){while(j!=n){nums[count++]=nums2[j++];}break;}if (j == n) {while (i != m) {nums[count++] = nums1[i++];}break;}
if(nums1[i]<nums2[j]){nums[count++]=nums1[i++];
}
else
{nums[count++]=nums2[j++];
}}if(count%2==0){return (nums[count/2-1]+nums[count/2])/2.0;}else{return nums[count/2];}}
}
m == 0的情况:如果nums1数组为空,直接计算nums2数组的中位数。若n为偶数,中位数是中间两个数的平均值;若n为奇数,中位数就是中间的那个数。n == 0的情况:如果nums2数组为空,直接计算nums1数组的中位数。同样,根据m的奇偶性来确定中位数的计算方式。count:用于记录合并后数组nums的当前索引。i:nums1数组的当前索引。j:nums2数组的当前索引。- 使用
while循环,只要count不等于m + n,就继续合并操作。 - 如果
i达到m,说明nums1数组已经遍历完,将nums2数组剩余的元素依次添加到nums数组中。 - 如果
j达到n,说明nums2数组已经遍历完,将nums1数组剩余的元素依次添加到nums数组中。 - 若
nums1[i] < nums2[j],将nums1[i]添加到nums数组中,并将i和count加 1;否则,将nums2[j]添加到nums数组中,并将j和count加 1。
