from typing import List import pytest class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: matrix_length = len(matrix) right = len(matrix) - 1 left = 0 middle = matrix_length // 2 while left <= right: middle_row_left = matrix[middle][0] middle_row_right = matrix[middle][-1] # Check if target is in current middle row if target >= middle_row_left and target <= middle_row_right: bingo_matrix = matrix[middle] bingo_matrix_left = 0 bingo_matrix_right = len(bingo_matrix) - 1 bingo_matrix_middle = (bingo_matrix_left + bingo_matrix_right) // 2 print(bingo_matrix) while bingo_matrix_left <= bingo_matrix_right: print(f"Middle: {bingo_matrix[bingo_matrix_middle]}") if target < bingo_matrix[bingo_matrix_middle]: bingo_matrix_right = bingo_matrix_middle - 1 bingo_matrix_middle = ( bingo_matrix_left + bingo_matrix_right ) // 2 elif target > bingo_matrix[bingo_matrix_middle]: bingo_matrix_left = bingo_matrix_middle + 1 bingo_matrix_middle = ( bingo_matrix_left + bingo_matrix_right ) // 2 else: print("Target: {target}") return True return False if target < middle_row_left: right = middle - 1 middle = (left + right) // 2 else: left = middle + 1 middle = (left + right) // 2 return False @pytest.mark.parametrize( "input_value,target, expected_value", [ ([[1, 2, 4, 8], [10, 11, 12, 13], [14, 20, 30, 40]], 10, True), ([[1, 2, 4, 8], [10, 11, 12, 13], [14, 20, 30, 40]], 15, False), ], ) def test_solution(input_value, target, expected_value): s = Solution() assert s.searchMatrix(matrix=input_value, target=target) == expected_value