寻找两个正序数组的中位数
给定两个大小分别为 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。