Binary search returns the first searched location and the last searched location

Location found for the first time: 

def left_bound(nums,target):
        low = 0
        high = len(nums)-1
        while low<=high:
            mid = low+(high-low)//2
            if nums[mid]<target:
                low = mid+1
            elif nums[mid]>target:
                high = mid-1
            else:
                high = mid-1 #向右缩小范围
        if low>=len(nums) or nums[low]!=target:
            return -1
        return low

Last location found:

 def right_bound(nums,target):
        low = 0
        high = len(nums)-1
        while low<=high:
            mid = low+(high-low)//2
            if nums[mid]<target:
                low = mid+1
            elif nums[mid]>target:
                high = mid-1
            else:
                low = mid+1
        if high<0 or nums[high]!=target:
            return -1
        return high

 

Guess you like

Origin blog.csdn.net/Matrix_cc/article/details/111521416