Skip to content

Median of Two Sorted Arrays

https://leetcode.com/problems/median-of-two-sorted-arrays/

Пример чем отличается коммер код от литкода

Проггерское-тру-мега-решение:

class Solution {

    /**
     * @param Integer[] $nums1
     * @param Integer[] $nums2
     * @return Float
     */
    function findMedianSortedArrays($nums1, $nums2) {
        if (count($nums1) > count($nums2)) {
            return $this->findMedianSortedArrays($nums2, $nums1);
        }

        $m = count($nums1);
        $n = count($nums2);
        $halfLen = intdiv($m + $n + 1, 2);
        $imin = 0;
        $imax = $m;

        while ($imin <= $imax) {
            $i = intdiv($imin + $imax, 2);
            $j = $halfLen - $i;

            if ($i < $m && $nums2[$j - 1] > $nums1[$i]) {
                $imin = $i + 1;
            } elseif ($i > 0 && $nums1[$i - 1] > $nums2[$j]) {
                $imax = $i - 1;
            } else {
                $maxOfLeft = 0;
                if ($i == 0) {
                    $maxOfLeft = $nums2[$j - 1];
                } elseif ($j == 0) {
                    $maxOfLeft = $nums1[$i - 1];
                } else {
                    $maxOfLeft = max($nums1[$i - 1], $nums2[$j - 1]);
                }

                if (($m + $n) % 2 == 1) {
                    return $maxOfLeft;
                }

                $minOfRight = 0;
                if ($i == $m) {
                    $minOfRight = $nums2[$j];
                } elseif ($j == $n) {
                    $minOfRight = $nums1[$i];
                } else {
                    $minOfRight = min($nums1[$i], $nums2[$j]);
                }

                return ($maxOfLeft + $minOfRight) / 2.0;
            }
        }
    }
}

Решение которое надо бизнесу (в 90%, исключая FANG и тд и тп)

class Solution {

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

        $merged = array_merge($a, $b);
        sort($merged);
        $cnt = count($merged);

        $middle = intdiv($cnt - 1, 2);

        if ($cnt % 2 === 0) {
            return ($merged[$middle] + $merged[$middle + 1]) / 2;
        } else {
            return $merged[$middle + 1];
        }
    }

}