Compare commits

...

9 Commits

Author SHA1 Message Date
Hariharan
c2615fac40
Merge aba42dce0a into 3e9ca92ca9 2024-11-05 18:06:45 +01:00
Hariharan
aba42dce0a
Delete searches/peakelementin2D.py 2024-10-15 20:03:42 +05:30
pre-commit-ci[bot]
ac0008a523 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-10-15 14:33:40 +00:00
Hariharan
c0b6798952
Update and rename BinarySearch_on_Sorted_2D_Array.py to binarysearch_on_sorted_2d_array.py 2024-10-15 20:03:04 +05:30
Hariharan
3da098ba6f
Update BinarySearch_on_Sorted_2D_Array.py 2024-10-15 19:59:26 +05:30
Hariharan
5afd15a9fe
Update and rename Peak_Element_on_2D.py to peakelementin2D.py 2024-10-15 19:50:27 +05:30
pre-commit-ci[bot]
14f8cf47ec [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-10-15 14:17:26 +00:00
Hariharan
03adefc12a
Add files via upload 2024-10-15 19:40:42 +05:30
Hariharan
eeeb9ab48a
Add files via upload 2024-10-15 19:33:08 +05:30

View File

@ -0,0 +1,72 @@
#!/usr/bin/env python3
def binary_search_2d(matrix: list[list[int]], target: int) -> tuple[int, int]:
"""
Searches for a target value in a 2D sorted array.
The matrix is sorted such that each row is in ascending order, and the
first element of each row is greater than the last element of the previous row.
Args:
matrix: A 2D list of integers sorted in ascending order.
target: The integer value to search for.
Returns:
A tuple (row_index, col_index) if found, otherwise (-1, -1).
Raises:
ValueError: If matrix is empty or not rectangular.
>>> binary_search_2d([[1, 3, 5], [7, 9, 11], [12, 13, 15]], 9)
(1, 1)
>>> binary_search_2d([[1, 3, 5], [7, 9, 11], [12, 13, 15]], 4)
(-1, -1)
>>> binary_search_2d([], 1) # doctest: +ELLIPSIS
Traceback (most recent call last):
...
ValueError: matrix must not be empty
>>> binary_search_2d([[1, 2], [3, 4, 5]], 3) # doctest: +ELLIPSIS
Traceback (most recent call last):
...
ValueError: matrix must be rectangular
"""
if not matrix or not matrix[0]:
raise ValueError("matrix must not be empty")
rows = len(matrix)
cols = len(matrix[0])
for row in matrix:
if len(row) != cols:
raise ValueError("matrix must be rectangular")
left, right = 0, rows * cols - 1
while left <= right:
mid = left + (right - left) // 2
mid_value = matrix[mid // cols][mid % cols]
if mid_value == target:
return mid // cols, mid % cols
elif mid_value < target:
left = mid + 1
else:
right = mid - 1
return -1, -1
if __name__ == "__main__":
import doctest
doctest.testmod()
# Example usage
matrix = [[1, 3, 5], [7, 9, 11], [12, 13, 15]]
target = 9
result = binary_search_2d(matrix, target)
if result == (-1, -1):
print(f"{target} was not found in the matrix.")
else:
print(f"{target} was found at position {result} in the matrix.")