DEV Community

Cover image for 4. Median of Two Sorted Arrays
MD ARIFUL HAQUE
MD ARIFUL HAQUE

Posted on • Updated on

4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays

Hard

Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.

The overall run time complexity should be O(log (m+n)).

Example 1:

  • Input: nums1 = [1,3], nums2 = [2]
  • Output: 2.00000
  • Explanation: merged array = [1,2,3] and median is 2.

Example 2:

  • Input: nums1 = [1,2], nums2 = [3,4]
  • Output: 2.50000
  • Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.

Example 3:

  • Input: nums1 = [0,0], nums2 = [0,0]
  • Output: 0.00000

Example 4:

  • Input: nums1 = [], nums2 = [1]
  • Output: 1.00000

Example 5:

  • Input: nums1 = [2], nums2 = []
  • Output: 2.00000

Constraints:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

Solution:

class Solution {

    /**
     * @param Integer[] $nums1
     * @param Integer[] $nums2
     * @return Float
     */
    function findMedianSortedArrays($nums1, $nums2) {
        $mergedArray = [];
        $totalLength = count($nums1) + count($nums2);
        $median = ($totalLength / 2);
        if ($totalLength % 2 === 0) {
            $index = [$median - 1, $median];
        } else {
            $index = [floor($median)];
        }
        $i = 0;
        $i1 = 0;
        $i2 = 0;
        while ($i < $totalLength) {
            if (!isset($nums1[$i1])) {
                $mergedArray[] = $nums2[$i2];
                $i2++;
                $i++;
                continue;
            }
            if (!isset($nums2[$i2])) {
                $mergedArray[] = $nums1[$i1];
                $i1++;
                $i++;
                continue;
            }
            if ($nums1[$i1] < $nums2[$i2]) {
                $mergedArray[] = $nums1[$i1];
                $i1++;
            } else {
                $mergedArray[] = $nums2[$i2];
                $i2++;
            }
            $i++;
        }
        return isset($index[1])
            ? ($mergedArray[$index[0]] + $mergedArray[$index[1]]) / 2
            : $mergedArray[$index[0]];
    }
}
Enter fullscreen mode Exit fullscreen mode

Contact Links

Top comments (0)