PHP算法之寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0
示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5

来源:力扣(LeetCode)

代码献上 一定还有更好的解法

class Solution {

    /**
     * @param Integer[] $nums1
     * @param Integer[] $nums2
     * @return Float
     */
    function findMedianSortedArrays($nums1, $nums2) {

        $n = count($nums1) + count($nums2); 
        $gav = 0;
        foreach($nums1 as $val){
            array_push($nums2,$val);
        }

        sort($nums2);
        //小学数学求中位数方法
        if($n%2){
            $gav = $nums2[intval($n/2)];
        }else{
            $gav = ($nums2[$n/2] + $nums2[$n/2 - 1])/2;
        }

        return $gav;
        //这个没有满足时间复杂度为 O(log(m + n))

    }
}

猜你喜欢

转载自www.cnblogs.com/corvus/p/11954351.html