Binary search to find the range in which the number lies

后端 未结 10 738
悲哀的现实
悲哀的现实 2020-12-16 18:31

I have an array

Values array: 12 20 32 40 52
              ^  ^  ^  ^  ^
              0  1  2  3  4

on which I have to perform binary sear

10条回答
  •  一向
    一向 (楼主)
    2020-12-16 18:56

    My python implementation:

    Time complexity: O(log(n)) Space complexity: O(log(n))

    def searchForRange(array, target):
        range = [-1, -1]
        alteredBinarySerach(array, target, 0, len(array) -1, range, True)
        alteredBinarySerach(array, target, 0, len(array) -1, range, False)
        return range
    
    def alteredBinarySerach(array, target, left, right, range, goLeft):
        if left > right:
            return
    
        middle = (left+ right)//2
    
        if array[middle] > target:
            alteredBinarySerach(array, target, left, middle -1, range, goLeft)
        elif array[middle] < target:
            alteredBinarySerach(array, target, middle +1, right, range, goLeft)
        else:
            if goLeft:
                if middle == 0 or array[middle -1] != target:
                    range[0] = middle
                else:
                    alteredBinarySerach(array, target, left, middle -1 , range, goLeft)
            else:
                if middle == len(array) -1 or array[middle+1] != target:
                    range[1] = middle
                else:
                    alteredBinarySerach(array, target, middle +1, right , range, goLeft)
    

提交回复
热议问题