median of two sorted arrays

后端 未结 10 616
南旧
南旧 2020-12-16 19:12

My question is with reference to Method 2 of this link. Here two equal length sorted arrays are given and we have to find the median of the two arrays merged.



        
10条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-16 19:56

    PHP Solution:

    function Solve( $aArrayOne, $aArrayTwo )
    {
        // Base case
        if( empty( $aArrayOne ) || empty( $aArrayTwo ) )
        {
            return false;
        }
        $iCountOne      = count( $aArrayOne );
        $iCountTwo      = count( $aArrayTwo );
    
        // Single value arrays base case
        if( $iCountOne === 1 && $iCountOne === $iCountTwo )
        {
            return ( $aArrayOne[ 0 ] + $aArrayTwo[ 0 ] ) / 2;
        }
    
        $iTotalElements = $iCountOne + $iCountTwo;
        $iHalfElements = floor( $iTotalElements / 2 );
        $aPartial       = [];
        $n              = 0;
        // Append elements to new combined array until midway point
        while( $n <= $iHalfElements )
        {
            // Compared both of the first elements to get the 
            // smallest one into the partial array
            if( $aArrayOne[ 0 ] <= $aArrayTwo[ 0 ] )
            {
                $aPartial[] = array_shift( $aArrayOne );
            }
            else
            {
                $aPartial[] = array_shift( $aArrayTwo );
            }
            ++$n;
        }
        // Check to see if we have an odd or an even array for final element math.
        $bIsOddAndPrecise = $iTotalElements % 2;
        $iMedian = ( $bIsOddAndPrecise ) 
        ? $aPartial[ $n - 1 ] 
        : ( $aPartial[ $n - 1 ] + $aPartial[ $n - 2 ] ) / 2;
        return $iMedian;
    }
    

    Use cases tested:

    // $aArrayOne = [1, 3, 4 ];
    // $aArrayTwo = [1, 2, 3 ];
    // EXPECTED 1,1,2,3,3,4 -> (2+3)/2 2.5
    // $aArrayOne = [1, 3, 4, 7, 8, 11, 44, 55, 62];
    // $aArrayTwo = [2, 4, 5, 7, 33, 56, 77];
    // Expected: 1,2,3,4,4,5,7,7,8,11,33,44,55,56,62,77 -> (7+8)/2 7.5
    // $aArrayOne = [1, 3, 4 ];
    // $aArrayTwo = [ 100, 100];
    // EXPECTED 1,3,4,100,100 -> 4
    // $aArrayOne = [1,5,8,10];
    // $aArrayTwo = [7,9,14,];
    // EXPECTED 1,2,7,8,9,10,14 - > 8
    // $aArrayOne = [1,5,8,10];
    // $aArrayTwo = [7];
    // EXPECTED 1,5,7,8,10 - > 7
    // $aArrayOne = [1,5,10];
    // $aArrayTwo = [50, 50];
    // EXPECTED 1,5,10,50,50 - > 10
    // $aArrayOne = [50, 50];
    // $aArrayTwo = [1,5,10];
    // EXPECTED 1,5,10,50,50 - > 10
    // $aArrayOne = [1];
    // $aArrayTwo = [1];
    // EXPECTED-> 1
    // $aArrayOne = [100, 100];
    // $aArrayTwo = [100];
    // EXPECTED -> 100
    

提交回复
热议问题