Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions searches/peakelementin2D.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
def find_peak_util(matrix, left, right, row_count):

Check failure on line 1 in searches/peakelementin2D.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (N999)

searches/peakelementin2D.py:1:1: N999 Invalid module name: 'peakelementin2D'

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file searches/peakelementin2D.py, please provide doctest for the function find_peak_util

Please provide return type hint for the function: find_peak_util. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: matrix

Please provide type hint for the parameter: left

Please provide type hint for the parameter: right

Please provide type hint for the parameter: row_count

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file searches/peakelementin2D.py, please provide doctest for the function find_peak_util

Please provide return type hint for the function: find_peak_util. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: matrix

Please provide type hint for the parameter: left

Please provide type hint for the parameter: right

Please provide type hint for the parameter: 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):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file searches/peakelementin2D.py, please provide doctest for the function find_peak

Please provide return type hint for the function: find_peak. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: matrix

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As there is no test file in this pull request nor any test function or class in the file searches/peakelementin2D.py, please provide doctest for the function find_peak

Please provide return type hint for the function: find_peak. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: 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}")
50 changes: 50 additions & 0 deletions sorts/BinarySearch_on_Sorted_2D_Array.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
def binary_search_2d(matrix: list[list[int]], target: int) -> tuple[int, int]:

Check failure on line 1 in sorts/BinarySearch_on_Sorted_2D_Array.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (N999)

sorts/BinarySearch_on_Sorted_2D_Array.py:1:1: N999 Invalid module name: 'BinarySearch_on_Sorted_2D_Array'
"""
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.

:param matrix: A 2D list of integers sorted in ascending order.
:param target: The integer value to search for.
:return: A tuple (row_index, col_index) if found, otherwise (-1, -1).

Examples:
>>> 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)
"""
if not matrix or not matrix[0]:
return -1, -1

rows, cols = len(matrix), len(matrix[0])
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.")
Loading