Skip to content

4. Median Of Two Sorted Arrays

Difficulty: Hard

LeetCode Problem View on GitHub


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.

 

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 {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int n = nums1.length, m = nums2.length;
        int first = -1, second = -1;
        int i = 0, j = 0;
        int count = -1;
        while (i < n && j < m) {
            if (nums1[i] <= nums2[j]) {
                count++;
                if (count == (n + m) / 2) {
                    first = nums1[i];
                }
                else if (count == (n + m) / 2 - 1) {
                    second = nums1[i];
                }
                i++;
            }
            else {
                count++;
                if (count == (n + m) / 2) {
                    first = nums2[j];
                }
                else if (count == (n + m) / 2 - 1) {
                    second = nums2[j];
                }
                j++;
            }
        }
        while (i < n) {
            count++;
            if (count == (n + m) / 2) {
                first = nums1[i];
            }
            else if (count == (n + m) / 2 - 1) {
                second = nums1[i];
            }
            i++;
        }
        while (j < m) {
            count++;
            if (count == (n + m) / 2) {
                first = nums2[j];
            }
            else if (count == (n + m) / 2 - 1) {
                second = nums2[j];
            }
            j++;
        }
        if ((n + m) % 2 == 0) {
            return ((first * 1.0 + second * 1.0) / 2);
        }
        return first;
    }
}

Complexity Analysis

  • Time Complexity: O(?)
  • Space Complexity: O(?)

Approach

Detailed explanation of the approach will be added here