Java 寻找两个有序数组的中位数

2020-04-14  本文已影响0人  向祥祥

问题

给定两个大小为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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读