55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
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
|