From cc55b1f2b057962eb210e83fe1c8cdcb6c9da00e Mon Sep 17 00:00:00 2001 From: rahini Date: Thu, 6 Nov 2025 23:05:59 +0530 Subject: [PATCH 1/5] fix binary search to handle duplicates correctly --- searches/binary_search_with_duplicates.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 searches/binary_search_with_duplicates.py diff --git a/searches/binary_search_with_duplicates.py b/searches/binary_search_with_duplicates.py new file mode 100644 index 000000000000..e4806858e63b --- /dev/null +++ b/searches/binary_search_with_duplicates.py @@ -0,0 +1,18 @@ +def binary_search_first_occurrence(arr, target): + left, right = 0, len(arr) - 1 + result = -1 + while left <= right: + mid = (left + right) // 2 + if arr[mid] == target: + result = mid + right = mid - 1 # keep searching left + elif arr[mid] < target: + left = mid + 1 + else: + right = mid - 1 + return result + +if __name__ == "__main__": + arr = [1, 2, 4, 4, 4, 5, 6] + target = 4 + print(binary_search_first_occurrence(arr, target)) # Expected output: 2 From 93fc23b090e39e64d8b9af7f613f54298e4ce301 Mon Sep 17 00:00:00 2001 From: rahini Date: Thu, 6 Nov 2025 23:19:55 +0530 Subject: [PATCH 2/5] Fix binary search to handle duplicates correctly --- searches/binary_search_with_duplicates.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/searches/binary_search_with_duplicates.py b/searches/binary_search_with_duplicates.py index e4806858e63b..2b3dab20f9b3 100644 --- a/searches/binary_search_with_duplicates.py +++ b/searches/binary_search_with_duplicates.py @@ -1,18 +1,21 @@ -def binary_search_first_occurrence(arr, target): +def binary_search_first_occurrence(arr: list[int], target: int) -> int: + """ + Return the index of the first occurrence of target in a sorted list. + + >>> binary_search_first_occurrence([1, 2, 4, 4, 4, 5], 4) + 2 + >>> binary_search_first_occurrence([1, 2, 3], 5) + -1 + """ left, right = 0, len(arr) - 1 result = -1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: result = mid - right = mid - 1 # keep searching left + right = mid - 1 elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return result - -if __name__ == "__main__": - arr = [1, 2, 4, 4, 4, 5, 6] - target = 4 - print(binary_search_first_occurrence(arr, target)) # Expected output: 2 From cdd6d42bf9f5e78e63850ef616886bcf210ac340 Mon Sep 17 00:00:00 2001 From: rahini Date: Fri, 7 Nov 2025 11:41:34 +0530 Subject: [PATCH 3/5] Fix #13226: consistent error handling for missing values --- coordinate_compression.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 coordinate_compression.py diff --git a/coordinate_compression.py b/coordinate_compression.py new file mode 100644 index 000000000000..bdafa1937e93 --- /dev/null +++ b/coordinate_compression.py @@ -0,0 +1,9 @@ +def compress(value): + if value not in coordinate_map: + raise ValueError(f"{value} not found in coordinate map") + return coordinate_map[value] + +def decompress(index): + if index < 0 or index >= len(original_values): + raise ValueError(f"Index {index} is out of bounds") + return original_values[index] From 71a764bbf1ea4c80bed7897a4fdad507ade24c26 Mon Sep 17 00:00:00 2001 From: prsai0110 Date: Fri, 7 Nov 2025 06:12:07 +0000 Subject: [PATCH 4/5] updating DIRECTORY.md --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f9859577493..6eb547fb6216 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -173,6 +173,8 @@ * [Volume Conversions](conversions/volume_conversions.py) * [Weight Conversion](conversions/weight_conversion.py) +## [Coordinate Compression](/coordinate_compression.py) + ## Data Compression * [Burrows Wheeler](data_compression/burrows_wheeler.py) * [Coordinate Compression](data_compression/coordinate_compression.py) @@ -1243,6 +1245,7 @@ ## Searches * [Binary Search](searches/binary_search.py) + * [Binary Search With Duplicates](searches/binary_search_with_duplicates.py) * [Binary Tree Traversal](searches/binary_tree_traversal.py) * [Double Linear Search](searches/double_linear_search.py) * [Double Linear Search Recursion](searches/double_linear_search_recursion.py) From 79cb53c2be521b36310975c9949315afe85f1733 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 7 Nov 2025 06:26:42 +0000 Subject: [PATCH 5/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- coordinate_compression.py | 1 + 1 file changed, 1 insertion(+) diff --git a/coordinate_compression.py b/coordinate_compression.py index bdafa1937e93..d135277496e4 100644 --- a/coordinate_compression.py +++ b/coordinate_compression.py @@ -3,6 +3,7 @@ def compress(value): raise ValueError(f"{value} not found in coordinate map") return coordinate_map[value] + def decompress(index): if index < 0 or index >= len(original_values): raise ValueError(f"Index {index} is out of bounds")