Matrix Median

Posted: 13 Nov, 2020
Difficulty: Moderate


Try Problem

You have been given a matrix of ‘N’ rows and ‘M’ columns filled up with integers where every row is sorted in non-decreasing order. Your task is to find the overall median of the matrix i.e if all elements of the matrix are written in a single line, then you need to return the median of that linear array.

The median of a finite list of numbers is the "middle" number when those numbers are listed in order from smallest to greatest. If there is an odd number of observations, the middle one is picked. For example, consider the list of numbers [1, 3, 3, 6, 7, 8, 9]. This list contains seven numbers. The median is the fourth of them, which is 6.

Input Format:
The first line contains a single integer ‘T’ representing the number of test cases. 

The first line of each test case will contain two integers ‘N’ and ‘M’ denoting the number of rows and columns, respectively.

Next ‘N’ lines contain ‘M’ space-separated integers each denoting the elements in the matrix.
Output Format:
For each test case, print an integer which is the overall median of the given matrix.

Output for every test case will be printed in a separate line.
You don’t need to print anything; It has already been taken care of. Just implement the given function.
1 <= 'T' <= 50
1 <= 'N' , 'M' <= 100
1 <= 'MATRIX'['I']['J'] <= 10 ^ 5
'N' * 'M' is always an odd number.

Where 'MATRIX'['I']['J']  denotes the value at ('I', 'J')th cell in the matrix.

Time limit: 1 sec
Approach 1

Since, the median is the middle number in a sorted, ascending or descending, list of numbers, our basic idea is to generate the list of integers from the given matrix in a sorted manner. The steps are as follows:

  • Create an auxiliary array/list of ‘N’ * ‘M’ length.
  • Traverse the matrix and insert all the elements in that array/list.
  • Sort that list/array in non-decreasing order.
  • The element on the (('N' * ‘M’)/2)th index (0-based indexing) will be the overall median of the matrix.
Try Problem