二分探索は、最初に検索された場所と最後に検索された場所を返します

初めて見つかった場所: 

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

最後に見つかった場所:

 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

 

おすすめ

転載: blog.csdn.net/Matrix_cc/article/details/111521416