algos_and_structures/neetcode/arrays/search_2d_matrix/solution.py

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