def find_peak_util(matrix, left, right, row_count): mid_col = (left + right) // 2 max_row_index = 0 for i in range(row_count): if matrix[i][mid_col] > matrix[max_row_index][mid_col]: max_row_index = i if (mid_col == 0 or matrix[max_row_index][mid_col] >= matrix[max_row_index][mid_col - 1]) and \ (mid_col == len(matrix[0]) - 1 or matrix[max_row_index][mid_col] >= matrix[max_row_index][mid_col + 1]): return matrix[max_row_index][mid_col] if mid_col > 0 and matrix[max_row_index][mid_col - 1] > matrix[max_row_index][mid_col]: return find_peak_util(matrix, left, mid_col - 1, row_count) return find_peak_util(matrix, mid_col + 1, right, row_count) def find_peak(matrix): if not matrix or not matrix[0]: return None return find_peak_util(matrix, 0, len(matrix[0]) - 1, len(matrix)) matrix = [ [10, 8, 10, 10], [14, 13, 12, 11], [15, 9, 11, 21], [16, 17, 19, 20] ] peak = find_peak(matrix) print(f"Peak element is: {peak}")