diff --git a/python/16_bsearch/bsearch_variants.py b/python/16_bsearch/bsearch_variants.py index 0b699556..a482fce8 100644 --- a/python/16_bsearch/bsearch_variants.py +++ b/python/16_bsearch/bsearch_variants.py @@ -5,6 +5,7 @@ from typing import List + def bsearch_left(nums: List[int], target: int) -> int: """Binary search of the index of the first element equal to a given target in the ascending sorted array. @@ -58,6 +59,7 @@ def bsearch_left_not_less(nums: List[int], target: int) -> int: else: return -1 + def bsearch_right_not_greater(nums: List[int], target: int) -> int: """Binary search of the index of the last element not greater than a given target in the ascending sorted array. @@ -75,6 +77,24 @@ def bsearch_right_not_greater(nums: List[int], target: int) -> int: else: return -1 + +def test_bsearch_left_not_less(): + a = bsearch_left_not_less([1, 2, 5], 1) + assert a == 0 + a = bsearch_left_not_less([1, 2, 5], 5) + assert a == 2 + a = bsearch_left_not_less([1, 2, 5], 2) + assert a == 1 + a = bsearch_left_not_less([1, 2, 3, 3, 5], 2) + assert a == 1 + a = bsearch_left_not_less([1, 2, 3, 3, 5], 6) + assert a == -1 + a = bsearch_left_not_less([], 1) + assert a == -1 + a = bsearch_left_not_less([1], 1) + assert a == 0 + + if __name__ == "__main__": a = [1, 1, 2, 3, 4, 6, 7, 7, 7, 7, 10, 22] @@ -86,9 +106,7 @@ def bsearch_right_not_greater(nums: List[int], target: int) -> int: print(bsearch_right(a, 7) == 9) print(bsearch_right(a, 30) == -1) - print(bsearch_left_not_less(a, 0) == 0) - print(bsearch_left_not_less(a, 5) == 5) - print(bsearch_left_not_less(a, 30) == -1) + test_bsearch_left_not_less() print(bsearch_right_not_greater(a, 0) == -1) print(bsearch_right_not_greater(a, 6) == 5)