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];
}
}
}