2022-06-14

/**

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:

输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2

**/

class Solution{

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {

        int m= nums1.length;

        int n= nums2.length;

        if(m+n== 1){

            return m==0? nums2[0]:nums1[0];

}

        int[] arr= merge(nums1,nums2);

        System.out.println(Arrays.toString(arr));

        if((m+n)%2 == 1){

            return arr[(m+n)/2];

        }else {

            return (arr[(m+n)/2]+arr[((m+n)/2)-1])/2.00;

}

}

    private int[] merge(int[] nums1, int[] nums2){

        int [] arr= new int[nums1.length+nums2.length];

        int idx1= 0;

        int idx2= 0;

        int i= 0;

        while(idx1< nums1.length|| idx2< nums2.length){

            if(idx1== nums1.length){

                arr[i++] = nums2[idx2++];

                continue;

}

            if(idx2== nums2.length){

                arr[i++] = nums1[idx1++];

                continue;

}

            if(nums1[idx1] < nums2[idx2]){

                arr[i++] = nums1[idx1++];

            }else {

                arr[i++] = nums2[idx2++];

}

}

        return arr;

}

}

你可能感兴趣的:(2022-06-14)