Back to challenges
Hard 0 solved 0% acceptance

Median of Two Sorted Arrays

Find the median of two sorted lists combined.

What you'll learn

  • Partition two sorted arrays with binary search
  • Find the median in O(log n)
  • Handle even and odd total lengths

Problem

Both lists are sorted in ascending order. Find the median of all their numbers together; for an even count it is the average of the two middle values. An O(log(m + n)) partition search is possible, but any correct method within the limits is accepted.

Implement median_of_two(first, second).

Input

first: A sorted list. second: A sorted list.

Output

Return the median.

Constraints

0 ≤ lengths ≤ 100,000; the combined length is at least 1

Examples

Example 1
Input:
first = [1, 3]
second = [2]

Expected output:
expected = 2.0
Input:
std::vector<long long> first = {1, 3};
std::vector<long long> second = {2};

Expected output:
double expected = 2.0;
Input:
long[] first = new long[] {1, 3};
long[] second = new long[] {2};

Expected output:
double expected = 2.0;

Explanation

Combined: [1, 2, 3]; the middle value is 2.

Example 2
Input:
first = [1, 2]
second = [3, 4]

Expected output:
expected = 2.5
Input:
std::vector<long long> first = {1, 2};
std::vector<long long> second = {3, 4};

Expected output:
double expected = 2.5;
Input:
long[] first = new long[] {1, 2};
long[] second = new long[] {3, 4};

Expected output:
double expected = 2.5;

Explanation

Combined: [1, 2, 3, 4]; (2 + 3) / 2 = 2.5.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

The combined order matters, but you do not need to merge everything if you can find the middle split directly.

Hint 2

Search for a partition where left halves contain exactly the lower middle elements and every left value is no larger than every right value.

Hint 3

Handle empty arrays and both odd and even total lengths carefully, since the median may come from one middle value or two.

Expected complexity

O(log(min(m, n))) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.