问题
给定两个大小为m和n的有序数组nums1和nums2。
请你找出这两个有序数组的中位数。
nums1 和 nums2 不会同时为空。
示例1
nums1 = [1, 3]
nums2 = [2]
中位数是2.0
示例2
nums1 = [1, 2]
nums2 = [3, 4]
中位数是(2 + 3)/ 2 =2.5
代码
public class MedianOfTwoSortedArrays {
public static void main(String[] args) {
System.out.println(findMedianSortedArrays(new int[]{},new int[]{2,3}));
}
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
double result=0.0;
if (nums1.length==0){
if(nums2.length%2==1){
result=nums2[nums2.length/2];
}else{
result=(nums2[nums2.length/2-1]+nums2[nums2.length/2])/2.0;
}
}else if (nums2.length==0){
if(nums1.length%2==1){
result=nums1[nums1.length/2];
}else{
result=(nums1[nums1.length/2-1]+nums1[nums1.length/2])/2.0;
}
}else if(nums1.length!=0 && nums2.length!=0){
if ((nums1.length+nums2.length)%2==0){
int index1=0;
int index2=0;
int median1=nums1[index1];
int median2=nums2[index2];
while((index1+index2)<(nums1.length+nums2.length)/2){
if (index1==nums1.length){
median1=nums2[index2++];
}else if(index2==nums2.length){
median1=nums1[index1++];
}else if(nums1[index1]>=nums2[index2]){
median1=nums2[index2++];
}else if(nums1[index1]<nums2[index2]){
median1=nums1[index1++];
}
}
if (index1==nums1.length){
median2=nums2[index2++];
}else if(index2==nums2.length){
median2=nums1[index1++];
}else if(nums1[index1]>=nums2[index2]){
median2=nums2[index2++];
}else if(nums1[index1]<nums2[index2]){
median2=nums1[index1++];
}
result=(median1+median2)/2.0;
}else{
int index1=0;
int index2=0;
while((index1+index2)<(nums1.length+nums2.length)/2+1){
if (index1==nums1.length){
result=nums2[index2++];
}else if(index2==nums2.length){
result=nums1[index1++];
}else if(nums1[index1]>=nums2[index2]){
result=nums2[index2++];
}else if(nums1[index1]<nums2[index2]){
result=nums1[index1++];
}
}
}
}
return result;
}
}
网友评论