The goal is to find the median of a row-wise sorted matrix.
This method combines all elements into a single array and then finds the median.
def find_median(matrix): total_elements = len(matrix) * len(matrix[0]) combined = [] # Combine all elements into a single array for row in matrix: combined.extend(row) # Sort the combined array combined.sort() # Find the median if total_elements % 2 == 0: return (combined[total_elements // 2 - 1] + combined[total_elements // 2]) / 2.0 else: return combined[total_elements // 2] # Example usage matrix = [ [1, 3, 5], [2, 6, 9], [3, 6, 9] ] print("Median:", find_median(matrix))
Median: 3.0
This method uses binary search to find the median efficiently.
def count_less_equal(matrix, mid): count = 0 rows = len(matrix) cols = len(matrix[0]) row, col = rows - 1, 0 while row >= 0 and col < cols: if matrix[row][col] <= mid: count += (row + 1) # All elements in this row are <= mid col += 1 else: row -= 1 return count def find_median(matrix): rows = len(matrix) cols = len(matrix[0]) low, high = 0, 100000 # Assuming the range of elements desired = (rows * cols + 1) // 2 # Median position while low < high: mid = low + (high - low) // 2 if count_less_equal(matrix, mid) < desired: low = mid + 1 else: high = mid return low # The median # Example usage matrix = [ [1, 3, 5], [2, 6, 9], [3, 6, 9] ] print("Median:", find_median(matrix))
Median: 3.0
This method uses a two-pointer technique to find the median.
def find_median(matrix): rows = len(matrix) cols = len(matrix[0]) total_elements = rows * cols median_pos = (total_elements - 1) // 2 count = 0 for row in matrix: for element in row: if count == median_pos: return element # Found the median count += 1 return -1 # Should not reach here # Example usage matrix = [ [1, 3, 5], [2, 6, 9], [3, 6, 9] ] print("Median:", find_median(matrix))
Median: 3.0