两个有序数组找中位数

发布时间 2023-10-29 20:48:32作者: 樱圃
/**
 * 寻找两个有序数组的中位数
 */
public class FindMedianSortedArrays {
    public static void main(String[] args) {
        int[] arr1={1,3,4,5};
        int[] arr2={1,2,3,6,9};
        System.out.println(findMedianSortedArrays(arr1,arr2));
    }
 
    //思路:把两个有序数组合并为一个有序数组,再求中位数
    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int[] arr=new int[nums1.length+nums2.length];
        int index1=0,index2=0;
        for(int i=0;i<arr.length;i++){
            if(index1<nums1.length&&index2<nums2.length){
                arr[i]=nums1[index1]<nums2[index2]?nums1[index1++]:nums2[index2++];
            }else if(index1==nums1.length){
                arr[i]=nums2[index2++];
            }else {
                arr[i]=nums1[index1++];
            }
        }
        if(arr.length%2==1){
            return (double) arr[arr.length/2];
        }
        if(arr.length%2==0){
            return (double) (arr[arr.length/2]+arr[arr.length/2-1])/2;
        }
        return 0;
    }