python 代码实现

def lower_bound(arr:list, target:int|float):
    """
    >>> arr = [1, 2, 3, 3, 3, 4, 5]
    >>> lower_bound(arr, 1)
    0
    >>> lower_bound(arr, 3)
    2
    >>> lower_bound(arr, 5)
    6
    >>> lower_bound(arr, 6)
    6
    """
    low = 0
    high = len(arr)-1
 
    while low < high:
        mid = (high+low) // 2
        if target < arr[mid]:
            high = mid
        elif target > arr[mid]:
            low = mid+1
        elif target == arr[mid]:
            high = mid
    return low
 
def upper_bound(arr:list, target:int|float):
    """
    >>> arr = [1, 2, 3, 3, 3, 4, 5]
    >>> upper_bound(arr, 3)
    5
    >>> upper_bound(arr, 1)
    1
    """
    low = 0
    high = len(arr)-1
 
    while low < high:
        mid = (high+low) // 2
        if target < arr[mid]:
            high = mid
        elif target > arr[mid]:
            low = mid+1
        elif target == arr[mid]:
            low = mid+1
    return low
 
if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)